我使用循环创建了一个包含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语句?
非常感谢提前!
答案 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();
}
希望这对你有帮助。