【问题标题】:modify a dynamically created button inside its click event在其点击事件中修改动态创建的按钮
【发布时间】:2018-02-27 08:06:17
【问题描述】:

这是我的 Android 代码,用于在每个表格行中动态创建表格、表格行以及文本视图和按钮。按钮最初显示“选择”。单击时,按钮文本应更改为“删除”,再次单击时,应显示“选择”。我为每个按钮创建了一个点击事件,它可以正常触发。但是,在单击事件中,我无法更改按钮文本。

//Create dynamic table
for (int i =0; i<pList.size(); i++) {
   dynamicTable = (TableLayout) findViewById(R.id.tableID);
   dynamicRow = new TableRow(this);

   //add label to row
   TextView tv = new TextView(this);
   tv.setText(pList.get(i));
   tv.setWidth(200);
   dynamicRow.addView(tv);

   //add select button to row
   dynamicBtn = new Button(this);
   dynamicBtn.setText("Select");
   dynamicBtn.setId(Integer.parseInt(pList.get(i)));
   dynamicBtn.setWidth(200);
   dynamicRow.addView(dynamicBtn);

   dynamicBtn.setOnClickListener(new View.OnClickListener() {
                           public void onClick(View v) {
                               if (dynamicBtn.getText().toString().contentEquals("Select"))
                               {
                                   selectedList.add( Integer.toString(dynamicBtn.getId()) );
                                   //This part is not working
                                   dynamicBtn.setText("Remove");

                               }
                               else if (dynamicBtn.getText().toString().contentEquals("Remove"))
                               {
                                   selectedList.remove( Integer.toString(dynamicBtn.getId()) );
                                   dynamicBtn.setText("Select");
                               }
                           }
                       });

   dynamicTable.addView(dynamicRow);

}

【问题讨论】:

  • "我无法更改按钮文本。"这到底是什么意思?你得到一个编译错误?它编译但没有按预期工作?
  • @Fweigl 不是编译错误。我没有得到想要的功能。

标签: android


【解决方案1】:

试试这个: 它重用视图 v 而不是范围外的变量。

dynamicBtn.setOnClickListener(new View.OnClickListener() {
                           public void onClick(View v) {

                               Button btn = (Button) v;

                               if (btn.getText().toString().contentEquals("Select"))
                               {
                                   selectedList.add( Integer.toString(btn.getId()) );                               
                                 btn.setText("Remove");

                               }
                               else if (btn.getText().toString().contentEquals("Remove"))
                               {
                                   selectedList.remove( Integer.toString(btn.getId()) );
                                   btn.setText("Select");
                               }
                           }
                       });

【讨论】:

    【解决方案2】:

    下面的代码应该可以解决问题。

    dynamicBtn.setOnClickListener(new View.OnClickListener() {
                               public void onClick(View v) {
                                   if(dynamicBtn.getText().equals("Select")){
                                        dynamicBtn.setText("Remove");
                                   }
                                   elseif(dynamicBtn.getText().equals("Remove")){
                                        dynamicBtn.setText("Select");
                                   }                                 
                               }
                           });
    

    【讨论】:

    • 我不认为它会在每次迭代时重新分配“dynamicBtn”。基本上,在当前的实现中,无论用户按下什么按钮,最后一个按钮都应该改变文本。
    猜你喜欢
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 2014-01-26
    • 2018-11-13
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    相关资源
    最近更新 更多