Android 用于以编程方式创建的按钮的onClick方法
我使用循环创建了一个由5个可点击文本视图组成的数组,设置了它们的参数大小、颜色、背景图像、可点击等,并设置了一个onClickListener,该数组称为myArrayofTVs。他们的ID是使用循环int i设置的。我有另一个预定义的数组,其中包含文本字符串,布局上还有其他文本视图。稍后在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
@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();
}
希望这能对你有所帮助