我遇到了Android编程问题:
我通过从ArrayList中读出数据来动态地将textview添加到布局中。 所以我在布局上得到了不同的文本视图。 现在我想为每个人设置一个OnclickListener,并根据单击的textview开始使用OnclickListener进行不同的活动。但我的问题是我不知道如何识别文本视图。我将它们添加为:
while(i<list.size()) {
String name = list.get(i).getName();
TextView txtViewName = new TextView(this);
txtViewName.setText(name);
layout.add(txtViewName);
i++;
}
一切正常,但我如何为每个txtView设置一个OnclickListener以及如何识别它们?
谢谢你的帮助!
答案 0 :(得分:0)
OnClickListener.onClick()
获取一个View
参数,用于标识所单击的视图。
您可以使用setTag()
和getTag()
设置和检索视图中的任意数据。
您可以为每个视图设置相同的侦听器,然后使用视图引用或标记数据来确定单击的视图。
答案 1 :(得分:0)
最简单的方法是将OnClickListener
设置为循环内的匿名内部类,并让它做适合该视图的任何事情:
final int viewNum = i;
txtViewName.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "You clicked on view "+viewNum, Toast.LENGTH_SHORT).show();
}
});
这只是一个示例,但它显示了如何让侦听器对每个视图采取不同的行为。这意味着你不需要任何其他东西来识别你的观点,因为当你设置听众时,你可以在循环中使用你需要的任何东西。
有几点需要注意:
MainActivity
,但您当然需要根据自己的情况进行更改。final
个局部变量。这就是为什么我设置final int viewNum = i
,然后使用它而不是i
。如果您被允许使用i
,它将具有您自然期望的相同效果。如果你想在onClick()
方法中引用其他局部变量,你需要一个类似的技巧。答案 2 :(得分:0)
您可以先使用View.generateViewId()为文字视图生成唯一的ID,然后在文字视图中使用setId(),然后使用switch-case
内的onClick()
进行比较