onClick方法用于以编程方式创建的按钮

时间:2011-08-18 17:31:03

标签: android arrays onclick

我使用循环创建了一个包含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语句将来添加新的textview /按钮)。无论如何使用一个语句来处理基于给定的变量id的所有按钮/可点击的文本视图,或者我是否必须为每个使用单独的case / tag / id语句?

非常感谢提前!

3 个答案:

答案 0 :(得分:0)

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

进行检查
if(child instanceof TextView)

如果它们的类型正确。然后,您可以将视图转换回TextView / Button / View并执行您想要执行的操作。

但听起来你想要一份清单。所以我建议使用带有适配器的ListView。

答案 1 :(得分:0)

我真的认为你应该使用Android提供的id而不是尝试比较对象。你的代码无法工作的原因,如果它有足够的循环,有点神秘,但我会尝试通过比较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];
    }
}

显然你也想避免在第二个内部语句中出现数组越界错误。

答案 2 :(得分:0)

我所做的是以编程方式夸大我的自定义布局,并在自定义布局膨胀的该按钮上使用onClickListener。然后,为了与特定项目进行交互,我获得了被点击的视图的父视图,例如。您的按钮,然后使用该视图更改视图的属性。这是我的代码片段。 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();
        }

希望这对你有帮助。