我有一个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); ,因此它们都应该是唯一的。
任何可以提供帮助的人? :)谢谢!
答案 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则用作在层次结构中查找视图的标识符。