我有一个由sqlite数据库填充的列表。我想要做的是将点击的行的值 - 一个字符串(不是行ID)传递给一个新的活动。例如,如果我有这个清单......
苹果
香蕉
胡萝卜
...
等等。
...我点击'香蕉',我希望'香蕉'被传递给新的活动。我可以让它工作,但只适用于列表中的第一项。所有其他列表项也返回相同的值(即'Apples')。这是我正在使用的代码......
private AdapterView.OnItemClickListener onListClick=new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent,
View view, int position,
long id)
Intent i=new Intent(MyApp.this, MyActivity.class);
TextView nameValue = (TextView)findViewById(R.id.ingredientText);
String content = nameValue.getText().toString();
i.putExtra(ID_EXTRA, String.valueOf(content));
startActivity(i);
}
};
同样,无论单击哪一行,此代码都会返回“Apples”的值。也许我对此采取了错误的方法,因为我还是刚开始使用Android中的数据库。有人可以告诉为什么上面的代码是错误的,我怎么能纠正它?提前感谢您的帮助。
答案 0 :(得分:2)
您始终可以从同一字段获取文字:TextView nameValue = (TextView)findViewById(R.id.ingredientText);
您必须使用parent
和position
来获取所选项目以获取content
。
答案 1 :(得分:2)
使用该代码,您将在TextView中传递文本,除非您更改它(显然),否则它将被修复。 如果您需要直接获取所选行的值,为什么不从数组中获取值?
假设您有一个ArrayList结果,它就像以下一样简单:
i.putExtra(ID_EXTRA, fruits.get(position);
答案 2 :(得分:2)
其他答案都是正确的。但是如果您希望直接从视图中获取值,则需要在传递给onItemClick的View上调用findViewById:
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
Intent i=new Intent(MyApp.this, MyActivity.class);
TextView nameValue = (TextView)**view**.findViewById(R.id.ingredientText);
String content = nameValue.getText().toString();
i.putExtra(ID_EXTRA, String.valueOf(content));
startActivity(i);
}
在原始代码中,您可以在活动的整个视图树上调用它,这就是为什么您可以获得相同的结果。