如何在Android中处理ListView单击

时间:2010-03-18 07:19:04

标签: android listview click onitemclicklistener

如何在ListView上收听点击事件?

这就是我现在所拥有的

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的类中。

9 个答案:

答案 0 :(得分:180)

在列表视图中,使用setOnItemClickListener

答案 1 :(得分:87)

假设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
    */  
  }
});

答案 2 :(得分:42)

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

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了解更多详情

答案 3 :(得分:17)

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

值得注意的是,OnItemClickListenerOnItemSelectedListener之间的区别虽然听起来微妙,但事实上很重要,因为项目选择和焦点与您AdapterView的触摸模式有关

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

答案 4 :(得分:7)

此解决方案非常简约,并且不会弄乱您的代码。

list_item.xml (不是listView!)中,像这样分配属性 android:onClick

<RelativeLayout android:onClick="onClickDoSomething">

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

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

答案 5 :(得分: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();
    }
});

答案 6 :(得分:5)

首先,该类必须实现click listenener:

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();
}

您可以查看并下载代码here

答案 7 :(得分:3)

在您的活动中使用setOnItemClickListener()api。以下是样本。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

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

});

答案 8 :(得分:0)

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

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

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

 }