【问题标题】:How to handle ListView click in Android如何在 Android 中处理 ListView 点击
【发布时间】:2011-01-28 21:55:18
【问题描述】:

如何监听 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 的类中。

【问题讨论】:

    标签: android listview click onitemclicklistener


    【解决方案1】:

    在您的列表视图中,使用setOnItemClickListener

    【讨论】:

    • 您如何将数据发送到该详细视图? (就像 youtube 点击视频一样)
    • 首先,该类必须实现点击监听器:实现 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(); }
    【解决方案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
        */  
      }
    });
    

    【讨论】:

    • lvonItemClick 中不可访问。有什么好办法解决这个问题?
    • @shinjin 最终确定。 final ListView lv = (ListView) findViewById(R.id.your_list_view);
    • 干净方式:Object o = ((ListView)arg0).getItemAtPosition(position);
    【解决方案3】:

    您需要在适配器类的 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

    【讨论】:

    • 但这并不能确定点击的是什么项目,这使得它或多或少对列表无用?对吗?
    • 您可以将标签设置为convertView并在onClick中进行检查。使用标签可以识别单击的项目...
    • 我找到了一个比适配器中的标签更优雅的解决方案,它存储一个 setOnClickListener 引用并在 onClick(View v) 方法上调用它。然后活动可以接收具有该位置的事件。
    • 您的 onClick 方法错误。应该是 onItemClick(AdapterView> parent, View view, int position, long id)
    • @IgorGanapolsky 没有错……!!这是处理点击事件的另一种方式。虽然现在不推荐。 [Android 文档] (developer.android.com/reference/android/view/…)。你所说的已经在 Aditya Mehta 的回答中了。
    【解决方案4】:

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

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

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

    【讨论】:

      【解决方案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
      }
      

      【讨论】:

      • 很好的解决方案,但是没有办法获得点击项目的位置
      • @BilalŞimşek 很长一段时间我都没有使用 Android,但是如果 view 可以包含一些元数据,那么它可能是获取位置的方式。
      【解决方案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();
          }
      });
      

      【讨论】:

        【解决方案7】:

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

        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

        【讨论】:

          【解决方案8】:

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

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

          【讨论】:

            【解决方案9】:

            在 Kotlin 中,向您的 listView 添加一个监听器,就像 java 一样简单

            your_listview.setOnItemClickListener { parent, view, position, id ->   
            
                Toast.makeText(this, position, Toast.LENGTH_SHORT).show()
            
             }
            

            【讨论】:

              猜你喜欢
              • 2013-07-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-12-09
              • 2011-10-31
              • 1970-01-01
              • 1970-01-01
              • 2013-01-24
              相关资源
              最近更新 更多