首页 > 解决方案 > 添加一个动态按钮并在它被点击时指定一个方法

问题描述

我有一个按钮,在 XML 中它看起来像这样:

<Button
    android:id="@+id/hello"
    android:layout_width="match_parent"
    android:tag="Greeting"
    android:layout_height="60dp"
    android:gravity="center_vertical"
    android:onClick="onClick"
    android:text="@string/hello" />

另外,我有方法public void onClick(View view) {}。因此,每当我单击该按钮时,该方法都应该运行。嗯,这很好用。

现在,我想添加动态按钮。

if (_layout == R.layout.fragment_general) {
    LinearLayout layout = view.findViewById(R.id.root);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        for(String text : readFromSharedPreferences(getContext())) {
            Button btn = new Button(this.getContext());
            btn.setText(text);
            btn.setTag(text);
            btn.setTextColor(Color.BLUE);
            btn.setBackgroundColor(Color.RED);
            layout.addView(btn);
        }
    }
}

将添加按钮,但是当我单击它们时,什么也没有发生。

我也尝试过btn.performClick()btn.callOnClick()但它们都不起作用。在这些方法中,我缺少一个参数。所以应该是btn.performClick("onClick")or btn.callOnClick("onClick")onClick但是,当我单击动态按钮时,我应该能够知道应该执行该方法。我怎样才能做到这一点?

标签: javaandroid

解决方案


试试这个代码: -

if (_layout == R.layout.fragment_general) {
            LinearLayout layout = view.findViewById(R.id.root);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                for (String text : readFromSharedPreferences(getContext())) {
                    Button btn = new Button(this.getContext());
                    btn.setText(text);
                    btn.setTag(text);
                    btn.setTextColor(Color.BLUE);
                    btn.setBackgroundColor(Color.RED);
                    layout.addView(btn);

                    btn.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_SHORT).show();
                        }
                    });
        }
    }
}

您只需在添加到线性布局setOnClickListener后添加即可。btn它对我有用


推荐阅读