【问题标题】:get OnClick() from programmatically added buttons?从以编程方式添加的按钮获取 OnClick()?
【发布时间】:2013-07-28 15:45:08
【问题描述】:

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

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 似乎不起作用!

【问题讨论】:

    标签: android button onclick onclicklistener buttonclick


    【解决方案1】:

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

        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]);
        }
    

    示例项目 ID:Your project

    【讨论】:

    • 有效!关键是:final int Index = bt;
    【解决方案2】:

    您可能应该使用View#setTag 设置一些您希望与按钮关联的任意数据。然后您可以只实例化一个OnClickListener,然后使用getTag 并以您需要的任何方式对该数据进行操作。

    【讨论】:

    • 谢谢!这个很好的答案应该被标记为解决方案,因为它更清晰易读。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      考虑这个例子:

      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");
      }
      }
      

      这很好用:)

      【讨论】:

        猜你喜欢
        • 2012-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-20
        • 1970-01-01
        • 1970-01-01
        • 2020-09-23
        相关资源
        最近更新 更多