如何在 Android 中处理 ListView 点击

Posted

技术标签:

【中文标题】如何在 Android 中处理 ListView 点击【英文标题】:How to handle ListView click in Android 【发布时间】: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 的类中。

【问题讨论】:

【参考方案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); 这里是文档的链接:developer.android.com/reference/android/widget/…【参考方案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()

 

【讨论】:

以上是关于如何在 Android 中处理 ListView 点击的主要内容,如果未能解决你的问题,请参考以下文章

在listview中使用意图时如何在android中处理NullPointerException?

android解决ScrollView嵌套ListView不能下拉刷新

如何从android的listview中的不同项目获取数据

android应用程序编程中如何获取遍历手机sd卡和系统目录获得.txt文档显示到ListView中?

如何禁用在android中单击ListView?

如何在android的listview中获取项目的视图?