Предполагая, что это фактический код, а не псевдокод, я согласен с Аароном в том, что использование полей-членов является вероятным источником вашей проблемы. Однако я не согласен с решением: вы не должны использовать поля. (Если вам нужно назвать свое поле «temp», это довольно хороший намек на то, что оно должно быть локальным.) Если вы создаете «конечную» локальную переменную, то вы знаете, что она не изменится из-под вас, и это фиксированное значение будет заблокировано в вашем анонимном подклассе (то есть слушателе).
Код становится следующим:
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", так как их место занимают локальные переменные.