ListView onItemClick只获取第一项

时间:2013-06-09 14:56:13

标签: android android-listview

我正在尝试获取所选项目的文本并将其显示在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();               
        }});

列表视图是单选列表视图。当我单击列表中的任何项目时,它始终显示列表的第一项。可能是什么导致了这个?如何获取所选项目的文本?

4 个答案:

答案 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)

请参阅AdapterView.OnItemClickListener

答案 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);

这将提供从列表视图中选择的文本,并且可以在任何地方使用。