Java android中每个textview的独立事件侦听器
我想将单独的事件侦听器添加到动态创建的textview列表中。到目前为止,代码如下所示:Java android中每个textview的独立事件侦听器,java,android,event-handling,event-listener,Java,Android,Event Handling,Event Listener,我想将单独的事件侦听器添加到动态创建的textview列表中。到目前为止,代码如下所示: while (cur.moveToNext()){ TextView tv = new TextView(this); temp = cur.getString(cur.getColumnIndexOrThrow("_ID")); result = "some text"; tv.setText(result); tv.setOnClickListener(new V
while (cur.moveToNext()){
TextView tv = new TextView(this);
temp = cur.getString(cur.getColumnIndexOrThrow("_ID"));
result = "some text";
tv.setText(result);
tv.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent myIntent = new Intent(v.getContext(), newsDetails.class);
myIntent.putExtra("id", temp);
startActivity(myIntent);
}
});
lOut.addView(tv);
}
但这是行不通的。单独的文本视图以列表的形式创建,但单独的事件侦听器不起作用 问题可能是您的
temp
变量。我假设它是一个成员变量?触发事件时,事件侦听器中的代码将使用temp
的值,而不是定义onClick()
函数时的值
在我脑海中,我能想到的最简单的解决方案是将temp
对象存储为TextView的标记,然后在onClick()
函数中检索它
while (cur.moveToNext()){
TextView tv = new TextView(this);
temp = cur.getString(cur.getColumnIndexOrThrow("_ID"));
result = "some text";
tv.setText(result);
tv.setTag(temp);
tv.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent myIntent = new Intent(v.getContext(), newsDetails.class);
myIntent.putExtra("id", v.getTag());
startActivity(myIntent);
}
});
lOut.addView(tv);
}
假设这是实际代码而不是伪代码,那么我同意Aaron的观点,即使用成员字段可能是问题的根源。但是,我不同意这个解决方案:您不应该使用字段。(如果您必须将字段命名为“temp”,这是一个很好的提示,它应该是一个局部变量。)如果您创建一个“final”局部变量,那么您知道它不会从您的下面更改,并且该固定值将锁定到您的匿名子类(即侦听器)中 代码如下所示:
while (cur.moveToNext()){
TextView tv = new TextView(this);
final String temp = cur.getString(cur.getColumnIndexOrThrow("_ID"));
final String result = "some text";
tv.setText(result);
tv.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent myIntent = new Intent(v.getContext(), newsDetails.class);
myIntent.putExtra("id", temp);
startActivity(myIntent);
}
});
lOut.addView(tv);
}
当然,您希望去掉名为“temp”和“result”的字段,因为局部变量取代了它们。是的,这种方法肯定更好。这就是我在周日早上尝试回答技术问题时得到的结果:)我的方法实际上可能与以前有相同的问题,因为您将存储指向同一成员变量的指针。