我试图获取所选项目的文本,并将其显示在吐司信息中。这是我写的代码。
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();
}});
列表视图是一个单项选择的列表视图。当我点击列表中的任何一项时,它总是显示列表中的第一项。可能是什么原因造成的?我怎样才能获得所选项目的文本?
你不需要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();
}});
你得到的是 arg0
也就是 AdapterView
. 你应该得到 arg1
而不是指被点击的视图。
String text = ((TextView) arg1).getText();
父 点击发生的AdapterView。 视图 点击的AdapterView中的视图(这将是一个由适配器提供的视图)。 位置 视图在适配器中的位置。 id 被点击的项目的行名。
public abstract void onItemClick (AdapterView<?> parent,
View view,
int position,
long id)
@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中充满了字符串
由于我觉得列表视图有项目,那么可以直接在onClick()方法中使用下面的一行来从列表视图中获取选中的文本。
String text = (String) adapterView.getItemAtPosition(position);
这样就可以从列表视图中得到选中的文本,并且可以到处使用。