Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 用于以编程方式创建的按钮的onClick方法_Android_Arrays_Onclick - Fatal编程技术网

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

Android 用于以编程方式创建的按钮的onClick方法,android,arrays,onclick,Android,Arrays,Onclick,我使用循环创建了一个由5个可点击文本视图组成的数组,设置了它们的参数大小、颜色、背景图像、可点击等,并设置了一个onClickListener,该数组称为myArrayofTVs。他们的ID是使用循环int i设置的。我有另一个预定义的数组,其中包含文本字符串,布局上还有其他文本视图。稍后在onClick方法中,由于所有按钮/可单击文本视图都做了类似的事情,我希望能够做如下事情: @Override public void onClick(View v) { if(v == myArrayo

我使用循环创建了一个由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语句。我并不真的想使用它们,因为会有很多重复的代码,将来每次我想添加新的textview/按钮时,我都必须添加一个新的case语句。是否可以使用一条语句根据给定的变量id处理所有按钮/可点击文本视图,或者我必须为每一条语句使用单独的case/tag/id语句


非常感谢

将视图添加到视图组中,并使用GetChildStatint索引和getChildCount创建循环。您可以循环视图组中的所有子视图/视图,并且可以使用

if(child instanceof TextView)
如果它们的类型正确。然后,您可以将视图转换回TextView/按钮/视图,并执行您想要执行的操作


但听起来你好像想要一张清单。因此,我建议使用带有适配器的ListView。

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

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

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

我所做的是以编程方式扩展自定义布局,并在自定义布局中的按钮上使用onClickListener。然后,为了与特定的项目进行交互,我得到了被单击视图的父视图,例如您的按钮,然后使用该视图更改视图的属性。这是我的代码片段。单击alertDialog可以更改新膨胀视图的值

            // 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();
        }
希望这能对你有所帮助