如何处理 Android 中的 ListView 单击

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

241729 次浏览

在列表视图中,使用 setOnItemClickListener

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

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

并在 ListActivity 中声明 click 侦听器,如下所示,

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

只有在通过扩展 BaseAdapter 自定义 Adapter 时,才会出现这种情况。

有关更多细节,请参考 ANDROID _ SDK/sample/ApiDemos/src/com/example/ANDROID/apis/view/List14.java

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

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

默认情况下,在触摸模式下,没有选择和焦点。 你可以看看 给你的进一步信息的主题。

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

你必须使用 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();
}
});

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

implements OnItemClickListener

然后将侦听器设置为 ListView

yourList.setOnItemclickListener(this);

最后,创建循环方法:

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

您可以查看并下载代码 给你

这个解决方案非常简约,并且不会搞乱代码。

在你的 List _ item. xml(不是列表视图!)中,像这样分配属性 Android: onClick:

<RelativeLayout android:onClick="onClickDoSomething">

然后在你的活动中调用这个方法:

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

在活动中使用 setOnItemClickListener () api。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){


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


});

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

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


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


}