如何在Android中处理ListView单击


141

如何在ListView上监听click事件?

这就是我现在所拥有的

ListView list = (ListView)findViewById(R.id.ListView01);  
...  
list.setAdapter(adapter);  

当我执行以下操作时

list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {  
   public void onItemSelected(AdapterView parentView, View childView, 
                                                         int position, long id) 
   {  
       setDetail(position);  
   }

   public void onNothingSelected(AdapterView parentView) {  

   }  
});  

点击似乎没有任何作用。
所有这些代码都存在于扩展Activity的类中。

Answers:


182

在列表视图上,使用 setOnItemClickListener


谢谢大卫。哎呀,我尝试了setOnClickListener和setOnItemSelectedListener,但是错过了阅读setOnItemClickListener的时间。谢谢,Tee
teepusink 2010年

我和teepusink一样:D
Shereef Marzouk 2011年

然后如何将数据发送到该详细视图?(就像youtube点击观看视频一样)
索伦(Sauron

首先,该类必须实现click监听器:实现OnItemClickListener,然后将监听器设置为ListView yourList.setOnItemclickListener(this);。最后,创建clic方法:@Override public void onItemClick(AdapterView <?>父级,视图,int位置,长id) Toast.LENGTH_SHORT).show(); }
bourax网站管理员2014年

88

假设ListView对象是lv,请执行以下操作-

lv.setClickable(true);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

  @Override
  public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

    Object o = lv.getItemAtPosition(position);
    /* write you handling code like...
    String st = "sdcard/";
    File f = new File(st+o.toString());
    // do whatever u want to do with 'f' File object
    */  
  }
});

1
lv无法在内部访问onItemClick。解决这个问题的好方法是什么?
shinjin 2014年

1
@shinjin做最后。final ListView lv = (ListView) findViewById(R.id.your_list_view);
Lekensteyn 2014年

清洁方式:Object o = ((ListView)arg0).getItemAtPosition(position);
JimmyB 2015年


42

您需要在适配器类的getView()方法中设置膨胀视图“ Clickable”和“能够监听单击事件”。

convertView = mInflater.inflate(R.layout.list_item_text, null);
convertView.setClickable(true);
convertView.setOnClickListener(myClickListener);

并在ListActivity中声明单击侦听器,如下所示:

public OnClickListener myClickListener = new OnClickListener() {
public void onClick(View v) {
                 //code to be written to handle the click event
    }
};

仅当您通过扩展BaseAdapter自定义适配器时,这才适用。

有关更多详细信息,请参阅ANDROID_SDK / samples / ApiDemos / src / com / example / android / apis / view / List14.java



但这不能确定要单击的项目,这对于列表几乎没有用?正确?
鸵鸟农场

您可以将标签设置为convertView并在onClick中进行检查。使用标签可以识别单击了哪个项目...
Vijay C

我发现比适配器中的标记存储setOnClickListener引用并在onClick(View v)方法上调用它更优雅的解决方案。那么活动可以通过该职位接收事件。
jocelyn 2012年

您的onClick方法错误。它应该是onItemClick(AdapterView <?>父级,View视图,int位置,长ID)
IgorGanapolsky

17

我面前的两个答案是正确的-您可以使用OnItemClickListener

这是很好的注意,差之间OnItemClickListenerOnItemSelectedListener,虽然听上去含蓄,其实显著,为项目选择和重点与您的触摸模式相关AdapterView

默认情况下,在触摸模式下,没有选择和焦点。您可以在这里查看有关该主题的更多信息。


8

该解决方案实际上是极简主义的,不会弄乱您的代码。

在您的list_item.xml中(不要listView!),分配属性android:onClick,如下所示:

<RelativeLayout android:onClick="onClickDoSomething">

然后在您的活动中调用此方法:

public void onClickDoSomething(View view) {
   // the view is the line you have clicked on
}

好的解决方案,但是,没有办法获得点击的项目的位置
BilalŞimşek

@BilalŞimşek很长时间以来,我已经离开了Android,但是如果view可以有一些元数据,那可能是获得职位的方式。
Amio.io

6

你必须要用setOnItemClickListener别人说的。
代码应如下所示:

listView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // When clicked, show a toast with the TextView text or do whatever you need.
        Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show();
    }
});

5

首先,该类必须实现click监听器:

implements OnItemClickListener

然后将侦听器设置为ListView

yourList.setOnItemclickListener(this);

最后,创建clic方法:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Toast.makeText(MainActivity.this, "You Clicked at " +countries[+ position], Toast.LENGTH_SHORT).show();
}

你可以看一下并在这里下载代码


3

在您的活动中使用setOnItemClickListener()API。以下是示例。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

@Override
public void onItemClick(AdapterView<> parent, View view, int position, long id)
{
     // your code here.
}

});

1

在Kotlin中,将监听器添加到listView中,就像java一样简单

your_listview.setOnItemClickListener { parent, view, position, id ->   

    Toast.makeText(this, position, Toast.LENGTH_SHORT).show()

 }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.