Android ListView onItemClick在活动中不起作用
当我在包含ListView的活动中使用此选项时,它不起作用Android ListView onItemClick在活动中不起作用,android,listview,onitemclicklistener,Android,Listview,Onitemclicklistener,当我在包含ListView的活动中使用此选项时,它不起作用 usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, ong arg3) { try { Intent intent = new Intent(U
usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
ong arg3) {
try {
Intent intent = new Intent(UsersListActivity.this,
UserActivity.class);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
});
这很有效。但为什么会有如此奇怪的行为。为什么它没有按应有的方式工作呢
谢谢如果您有自定义适配器视图,您需要参考该适配器视图。我认为,如果您引用了超类adapterview,并且在调用
setAdapter()
时,new adapterview.OnItemClickListener()
的代码块将不会执行
usersList.setOnItemClickListener(new CustomAdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
ong arg3) {
try {
Intent intent = new Intent(UsersListActivity.this,
UserActivity.class);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
});
usersList.setOnItemClickListener(新的CustomAdapterView.OnItemClickListener(){
公共链接(AdapterView arg0、视图arg1、内部arg2、,
(第3段){
试一试{
意向意向=新意向(UsersListActivity.this,
UserActivity.class);
星触觉(意向);
}捕获(例外e){
e、 printStackTrace();
}
}
});
它会工作的
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3) {
// TODO Auto-generated method stub
try {
Intent intent = new Intent(mActivity, UserActivity.class);
mActivity.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
});
lv.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(适配器视图arg0、视图arg1、内部位置、长arg3){
//TODO自动生成的方法存根
试一试{
意向意向=新意向(mActivity,UserActivity.class);
主动性。主动性(意图);
}捕获(例外e){
e、 printStackTrace();
}
}
});
尝试在活动类中使用此行
usersList.setOnItemClickListener(new OnItemClickListener() {
此行仅使用活动类中的适配器。此操作无效。我想不太清楚
usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
usersList.setOnItemClickListener(新)
AdapterView.OnItemClickListener(){
这里您使用了适配器视图的视图
,它是自定义适配器的父类
。这就是它不起作用的原因。相反,您应该使用自定义适配器的视图
getView()
函数帮助您将父级Adpater视图
的视图转换为自定义适配器
视图
所以你可以使用这两个选项中的任何一个
usersList.setOnItemClickListener(new CustomAdapterView.OnItemClickListener() {
或
这两个选项都可以使用。我发现:
当您单击时,您的自定义列表项会出现不响应的情况…那么原因是什么?解决方案是什么
以下是几个问题和解决方案:
1.场景:列表项布局包含复选框
问题:McClickListener没有响应
原因:默认情况下,复选框也有自己的click listener来更改其状态,并覆盖容器ListView
解决方案:通过将这些属性设置为false
android:focusable="false"
android:focusableInTouchMode="false"
2.场景:随机
问题:McClickListener根本不响应任何消息
原因:不知道
解决方案:在代码中,只需在设置适配器之前设置一个McClickListener。它可以随机工作@@
3.场景:列表项包含ImageButton
问题:McClickListener根本不响应任何消息
原因:不知道
解决方案:在代码中,将ImageButton焦点设置为false
ImageButton button = (ImageButton) convertView.findViewById(R.id.imageButton);
button.setFocusable(false);
4.场景:列表项包含TextView
问题:McClickListener无法响应
原因:我认为您已将此属性设置为TextView:android:inputType=“textMultiLine”
解决方案:只需使用android:minLines/android:maxLines
删除该属性即可
5.场景:列表项包含链接到网站URL或任何“mailto:”内容的文本视图
问题:McClickListener无法响应
原因:TextView覆盖列表项的焦点
解决方案:只需删除TextView上的属性android:autoLink
。您是否使用自定义适配器。?是的。我的项目中几乎所有的列表视图都使用自定义适配器。大约有10-12个。但我从未遇到过这个错误。您可能会感兴趣的一件事是:我对3个列表视图使用相同的父项和相同的列表项,但使用不同的租用适配器不会引起任何问题,对吗?我已尝试在下面的回答中对此意外行为提供一些解释。如果我在某个地方出错,请告诉我。但这是我一直在使用的东西。从来没有造成过这样的问题。这看起来像。但为什么它在其他地方工作到现在为止?事实上,在3 sim之外ilar ListView具有相同的布局和相同的ListView项,1可以正常工作,而其他2不应该如此。列表视图中可能存在一些不同之处。因为如果使用自定义适配器,则必须使用同一适配器的视图。唯一的区别是1没有任何可单击的选项ListViewItem中的子项。其他2个有一个按钮,其onClickListener在getView()中实现.就是这样。你已经得到了解释。如果你需要使用onClickListener,你需要使用自定义适配器的视图。@Archie.bpgc:任何时候,事实上都要感谢你。我以前没有想过,但你的帖子让我对它有了深刻的理解。
android:focusable="false"
android:focusableInTouchMode="false"
ImageButton button = (ImageButton) convertView.findViewById(R.id.imageButton);
button.setFocusable(false);