-2

我在为 Android 编程时遇到问题:

我通过从 ArrayList 中读出数据来动态地将文本视图添加到布局中。所以我的布局上有不同的文本视图。现在我想为它们中的每一个设置一个 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 以及如何识别它们?

谢谢你的帮助!

4

3 回答 3

0

您可以首先使用View.generateViewId()为您的文本视图生成一个唯一 ID, 然后在您的 textview 上使用setId()switch-case ,然后使用inside进行比较onClick()

于 2014-12-16T14:27:32.353 回答
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局部变量。这就是为什么我设置 a final int viewNum = i,然后使用它而不是i. 如果您被允许使用,它将具有与您自然期望的相同的效果i。如果您想在onClick()方法中引用其他局部变量,则需要类似的技巧。
于 2014-12-16T13:40:43.053 回答
0

OnClickListener.onClick()获取一个View参数,该参数标识被单击的视图。

您可以使用setTag()andgetTag()设置和检索视图上的任意数据。

您可以为每个视图设置相同的侦听器,然后使用视图引用或标记数据来确定单击了哪个视图。

于 2014-12-16T13:32:42.980 回答