识别OnclickListener的动态添加视图

时间:2014-12-16 13:29:55

标签: java android textview onclicklistener identify

我遇到了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以及如何识别它们?

谢谢你的帮助!

3 个答案:

答案 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();
     }
});

这只是一个示例,但它显示了如何让侦听器对每个视图采取不同的行为。这意味着你不需要任何其他东西来识别你的观点,因为当你设置听众时,你可以在循环中使用你需要的任何东西。

有几点需要注意:

  1. 我认为封闭式活动名为MainActivity,但您当然需要根据自己的情况进行更改。
  2. 匿名内部类只能访问final个局部变量。这就是为什么我设置final int viewNum = i,然后使用它而不是i。如果您被允许使用i,它将具有您自然期望的相同效果。如果你想在onClick()方法中引用其他局部变量,你需要一个类似的技巧。

答案 2 :(得分:0)

您可以先使用View.generateViewId()为文字视图生成唯一的ID,然后在文字视图中使用setId(),然后使用switch-case内的onClick()进行比较