动态添加行,setOnClickListener TextView

时间:2011-03-19 00:48:11

标签: android linker onclick textview rows

我有一个for循环,每次打印出一个带有TextView的行。我希望这个TextView是可点击的,当点击它时,它应该启动另一个活动并发送一个带有Intent的ID。但就是这样,我无法工作。所有链接都很好地显示在表格中,文本视图可以点击,但所有链接都会将我发送到具有相同ID的下一个活动,即最后一个链接的ID。

以下是for循环内容的简化版本:

TextView title = new TextView(this);
title.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
title.setText(titleLine);
title.setClickable(true);
title.setId(rows);
rows++;

title.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent myIntent = new Intent(a.this, b.class);
        myIntent.putExtra("id", idLine);
        a.this.startActivity(myIntent);
    }
});

contRight.addView(title);

我认为问题是所有textView看起来都一样,所以最后一个setOnClickListener适用于所有链接。但是,我已经为每个标题添加了一个ID,使用以下代码: title.setId(rows); ,因此它们都应该是唯一的。

任何可以提供帮助的人? :)谢谢!

1 个答案:

答案 0 :(得分:4)

idLine v.getId()不应该idLine?这个值尽可能“新鲜”是好的,这样你就不会读取旧的值:在这种情况下,最后一行的值可能潜伏在title.setTag(rows); 中。因此,直接从视图中获取值是最安全的方法。

此外,“标签”可能是比id更好的存储信息的地方。您可以访问标记,并且确实将任意数量的参数作为标记存储在任何视图上,而无需更改id:

intent.putExtra((Integer) v.getTag());

然后再说:

title.setTag("rowid", rows);

要存储多个对象(使用键),您可以使用:

intent.putExtra((Integer) v.getTag("rowid"));

然后使用:

检索它
{{1}}

然后,如果您的要求发生变化,您可以添加其他密钥。

在任何情况下,标记的意图是存储信息以供以后检索,而id则用作在层次结构中查找视图的标识符。