1

我在布局中添加了一些按钮:

LinearLayout row = (LinearLayout)findViewById(R.id.KeysList);
    keys=db.getKeys(console);

    my_button=new Button[keys.size()];
    for (bt=0;bt<keys.size();bt++){
           my_button[bt]=new Button(this);
           my_button[bt].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.FILL_PARENT));
           my_button[bt].setText(keys.get(bt));
           my_button[bt].setId(bt);
           row.addView(my_button[bt]);
           my_button[bt].setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  if (my_button[bt].getId() == ((Button) v).getId()){
                      Toast.makeText(getBaseContext(), keys.get(bt), 0).show();
                  }
              }
           });
        }


我想知道单击了哪个按钮以及如何获取单击按钮的文本?
而且我认为在这里使用 bt 似乎不起作用!

4

4 回答 4

5

此代码正在运行。我希望它对你有帮助:)

    final ArrayList<String> Keys = new ArrayList<String>();
    for(int i = 0; i < 10; i ++){
        Keys.add("Keys is : " + String.valueOf(i));
    }

    LinearLayout Row = (LinearLayout)findViewById(R.id.KeysList);

    final Button[] my_button = new Button[Keys.size()];

    for (int bt = 0; bt < Keys.size(); bt ++){
        final int Index = bt;

        my_button[Index] = new Button(this);
        my_button[Index].setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
        my_button[Index].setText(Keys.get(Index));
        my_button[Index].setId(Index);

        my_button[bt].setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (my_button[Index].getId() == ((Button) v).getId()){
                    Toast.makeText(getBaseContext(), Keys.get(Index), 0).show();
                }
            }
        });

        Row.addView(my_button[Index]);
    }

ExampleProject id :你的项目

于 2013-07-28T23:55:44.650 回答
1

您可能应该使用View#setTag来设置一些您想与 Button 关联的任意数据。然后,您可以只实例化一个OnClickListener,然后以getTag您需要的任何方式使用和处理该数据。

于 2013-07-28T23:37:29.753 回答
0

另一种方法是让您的活动监听所有按钮点击,然后您只需过滤相应的 ID。您根本不应该获取按钮的文本并使用它。您应该使用自己的标识符类型,理想情况下这个想法就足够了。或者,也许您像@qberticus 所描述的那样使用 setTag。

于 2013-07-28T23:53:56.030 回答
0

考虑这个例子:

public class MainActivity extends Activity implements View.OnClickListener
{

LinearLayout linearLayout;
Button [] button;
View.OnClickListener listener;
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    linearLayout=(LinearLayout)findViewById(R.id.parent_lay);
    String[] array={"U123","U124","U125"};
    int length=array.length;
    System.out.println("11111111111111111111111111");
    button=new Button[length];
    for(int i=0;i<length;i++)
    {
        button[i]=new Button(getApplicationContext());
        button[i].setId(i);
        button[i].setText("User" + i);
        button[i].setOnClickListener(this);
        linearLayout.addView(button[i]);
    }
}
@Override
public void onClick(View view)
{
    view.getId();
    Button button=(Button)findViewById(view.getId());
    button.setText("Changed");
}
}

这很好用:)

于 2016-03-19T18:58:16.067 回答