【问题标题】:onClick method for programmatically created buttons以编程方式创建的按钮的 onClick 方法
【发布时间】:2011-08-19 02:17:10
【问题描述】:

我使用循环创建了一个包含 5 个可点击文本视图的数组,设置了它们的参数(大小、颜色、背景图像、可点击等),并设置了一个 onClickListener,该数组称为“myArrayofTVs”。它们的 id 已使用循环 int (i) 设置。我有另一个包含文本字符串的预定义数组,并且布局上存在其他文本视图。稍后在 onClick 方法中,由于所有按钮/可点击的文本视图都执行非常相似的操作,我希望能够执行以下操作:

@Override
public void onClick(View v) { 

if(v == myArrayofTVs[i]) {               //using 'i' here doesn't seem to work
tv1.setText(myArray2[i]);
tv2.setText(myArray2[i+1];}
etc
etc}

我尝试了各种不同的方法,例如使用 switch case 语句(真的不想使用这些,因为会有很多重复的代码,每次我想添加一个新的 case 语句将来添加新的文本视图/按钮)。无论如何使用一个语句来处理基于给定变量 id 的所有按钮/可点击文本视图,还是我必须为每个语句使用单独的 case/tag/id 语句?

非常感谢!

【问题讨论】:

    标签: android arrays onclick


    【解决方案1】:

    将视图添加到您的 ViewGroup 并使用 getChildAt(int index) 和 getChildCount() 创建一个循环。您可以循环视图组中的所有子视图/视图,您可以使用

    if(child instanceof TextView)
    

    如果它们是正确的类型。然后你可以将视图转换回 TextView/Button/View 并做你想做的事情。

    但听起来你想要一个东西的清单。所以我建议使用 ListView 后面有一个适配器。

    【讨论】:

      【解决方案2】:

      我真的认为您应该使用 Android 提供的 id 而不是尝试比较对象。如果您的代码有足够的 for 循环,那么您的代码无法工作的原因有点神秘,但我会尝试通过比较 ID 而不是对象来尽可能地并行您在示例中看到的 switch 语句。

      for( int i = 0; i < myArrayofTvs.length; i++ )
          if(v.getId() == myArrayofTVs[i].getId()) {               
              tv1.setText(myArray2[i]); 
              tv2.setText(myArray2[i+1];
          }
      }
      

      显然,您还希望避免在第二个内部语句中出现数组越界错误。

      【讨论】:

        【解决方案3】:

        我所做的是以编程方式膨胀我的自定义布局,并在自定义布局膨胀的那个按钮上使用 onClickListener。然后与特定项目交互,我得到了被点击的视图的父视图,例如。您的按钮,然后使用该视图更改视图的属性。这是我的代码的 sn-p。 alertDialog 的 onClick 是我更改新膨胀视图的值的地方。

                    // if an edit button of numbers row is clicked that number will be edited
                if (view.getId() == R.id.NumberRowEditButton)
                {
                    AlertDialog.Builder alert = new AlertDialog.Builder(this);
        
                    alert.setTitle("Contact edit");
                    alert.setMessage("Edit Number");
        
                    // Set an EditText view to get user input
                    final EditText input = new EditText(this);
        
                    input.setSingleLine();
                    alert.setView(input);
        
                    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener()
                    {
                        public void onClick(DialogInterface dialog, int whichButton)
                        {
                            // get input
                            Editable value = input.getText();
                            if(value.length() > 4){
        
                                View tempView = (View) view.getParent();
                                TextView tempTV = (TextView) tempView.findViewById(R.id.numberRowTextView);
                                String number = tempTV.getText().toString();
        
                                tempTV.setText(value.toString());
                            }
                            else
                            {
                                // ...warn user to make number longer
                                final Toast msgs = Toast.makeText(ContactEdit.this, "Number must be over 4 digits.", Toast.LENGTH_SHORT);
                                msgs.setGravity(Gravity.CENTER, msgs.getXOffset() / 2, msgs.getYOffset() / 2);
                                msgs.show();
                            }
                        }
                    });
        
                    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
                    {
                        public void onClick(DialogInterface dialog, int whichButton)
                        {
                            // cancel the dialog
                            dialog.cancel();
                        }
                    });
        
                    alert.show();
                }
        

        希望这对您有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-29
          • 1970-01-01
          • 1970-01-01
          • 2023-03-25
          相关资源
          最近更新 更多