我正在尝试获取所选项目的文本并将其显示在Toast消息中。这是我写的代码:
final ListView lv = (ListView)findViewById(R.id.firstflightlist);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
TextView c = (TextView) arg0.findViewById(arg1.getId());
String text = c.getText().toString();
Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
}});
列表视图是单选列表视图。当我单击列表中的任何项目时,它始终显示列表的第一项。可能是什么导致了这个?如何获取所选项目的文本?
答案 0 :(得分:6)
你不需要findViewById,你已经获得了你点击的视图。 findViewById也只找到与id匹配的第一个项目,在列表视图中你有很多具有相同id的项目,所以它找到了第一个
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
TextView c = (TextView) arg1; //<--this one
String text = c.getText().toString();
Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
}});
答案 1 :(得分:3)
您将获得arg0
AdapterView
。你应该得到arg1
而不是引用点击的视图。
String text = ((TextView) arg1).getText();
parent 发生点击的AdapterView 视图已点击的AdapterView中的视图(这将是由。提供的视图 适配器)
位置适配器中视图的位置 id 点击的商品的行ID。
public abstract void onItemClick (AdapterView<?> parent,
View view,
int position,
long id)
答案 2 :(得分:2)
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String text = (String) parent.getItemAtPosition(position);
Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
}});
假设您的ListView填充了String
答案 3 :(得分:0)
我认为列表视图中有项目,因此可以直接使用onClick()方法内的下面一行从列表视图中获取选定的文本:
String text = (String) adapterView.getItemAtPosition(position);
这将提供从列表视图中选择的文本,并且可以在任何地方使用。