Q如何在android中处理listview点击

如何侦听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) {  

   }  
});  

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

2019-09-17 09:51:08  Ruan_Lopes

A回答

  • 1

    在列表视图中,使用setOnItemClickListener

    2019-09-19 14:18:34  David Hedlund
    • 谢谢大卫。天啊,我试过setonclicklistener和setonemselectedlistener,但是没读过setonemclicklistener。谢谢,T – teepusink Mar 18 '10 at 8:37
    • 我的做法与teepusink:d相同 – Shereef Marzouk Oct 18 '11 at 7:12
    • 然后如何将数据发送到该详细视图?(就像YouTube点击视频一样) – Sauron Feb 4 '14 at 3:18
    • 首先,该类必须实现click listener:实现onitemclicklistener,然后将listener设置为listview yourlist.setonitemclicklistener(this);最后,创建clic方法:@override public void onitemclick(adapterview<;?>;父级,视图视图,int position,long id){toast.makeText(mainActivity.this,";您在";+countries[+position],toast.length_short.show()}处单击了 – bourax webmaster Apr 5 '14 at 9:51
  • 2

    假设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
        */  
      }
    });
    
    2019-09-19 14:18:41  meagar Aditya Mehta
    • 1
      lvonItemClick内部不可访问。有什么好办法可以避开这个问题? – shinjin Apr 8 '14 at 17:47
    • 1
      @新晋最终定稿。final ListView lv = (ListView) findViewById(R.id.your_list_view); – Lekensteyn Jun 4 '14 at 23:15
    • 干净的方式:Object o = ((ListView)arg0).getItemAtPosition(position); – JimmyB Oct 24 '15 at 15:09
    • 这里是指向文档的链接:developer.android.com/reference/android/widget/&hellip; – trinity420 Apr 8 '17 at 18:31
  • 3

    您需要在适配器类getview()方法中设置膨胀视图click able和able to listen to click events。

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

    并在listactivity中声明click listener,如下所示,

    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/api/view/list14.java

    2019-09-19 14:18:50  Vijay C
    • 感谢Vijay,我在充气视图中遇到了点击问题,我已经从您的回答中解决了这个问题 – dhaiwat Nov 18 '10 at 11:37
    • 但这并不能确定点击的是什么项目,这对列表来说或多或少是无用的?对的? – farm ostrich May 20 '11 at 23:55
    • 您可以将tag设置为convertView,并在onclick中选中它。使用标记可以识别单击的项目… – Vijay C Sep 2 '11 at 12:08
    • 我找到了一个比适配器中的标记更优雅的解决方案,它存储了一个setonclicklistener引用并在onclick(view v)方法上调用它。然后活动可以用位置接收事件。 – jocelyn Dec 29 '12 at 19:45
    • onclick方法错误。应该是OnEmClick(AdapterView<;?>;父级,视图,内部位置,长ID) – IgorGanapolsky Oct 21 '13 at 21:14
    • @igorganapolsky没有错!!这是处理单击事件的另一种方法。不过现在不推荐了。[Android文档](developer.android.com/reference/android/view/&hellip;)。你所说的已经在阿迪蒂亚·梅塔的答案里了。 – Vijay C Oct 22 '13 at 1:06
  • 4

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

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

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

    2019-09-19 14:18:53  Dimitar Dimitrov
    • 2
      bah Android疯狂 – max4ever Feb 6 '12 at 12:09
  • 5

    这个解决方案非常简单,不会弄乱您的代码。

    list_item.xml中(不是listview!)按如下方式分配属性android:onclick

    <RelativeLayout android:onClick="onClickDoSomething">
    

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

    public void onClickDoSomething(View view) {
       // the view is the line you have clicked on
    }
    
    2019-09-19 14:18:54  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();
        }
    });
    
    2019-09-19 14:18:55  António Almeida Shudy
  • 7

    首先,类必须实现click listener:

    implements OnItemClickListener
    

    然后将侦听器设置为列表视图

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

    您可以查看并下载代码这里

    2019-09-19 14:18:57  bourax webmaster
  • 8

    在活动中使用setOnEmClickListener()API。下面是示例。

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
    
    @Override
    public void onItemClick(AdapterView<> parent, View view, int position, long id)
    {
         // your code here.
    }
    
    });
    
    2019-09-19 14:18:58  Amey Haldankar
  • 9在Kotlin中,向ListVIEW添加一个监听器和Java

    一样简单
    your_listview.setOnItemClickListener { parent, view, position, id ->   
    
        Toast.makeText(this, position, Toast.LENGTH_SHORT).show()
    
     }
    
    2019-09-19 14:18:59  Allen