我在google上搜索了很多,堆栈溢出,发现了这个:OnItemCLickListener not working in listview ANDROID。但似乎阳光的答案对我的情况不起作用。其他答案都是类似的。
我尝试了以下方法:
将android:focusable="false"
添加到我的列表项xml
在ViewHolder中添加TextView.setFocusable(false)
和TextView.setClickable(false)
使用上面链接中描述的xml。
但它们都不起作用。
这是我的xml和java代码:
list_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:descendantFocusability="blocksDescendants"
android:focusable="false"
android:paddingTop="2dp"
android:gravity="center_vertical" >
<TextView
android:id="@+id/ninegrid_number_list_choice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/ninegrid_number_listchoice_text_size"
android:gravity="center"
>
</TextView>
</LinearLayout>
getView
int list adapter.java:
@Override
public View getView(int position, View convertView, final ViewGroup parent) {
ViewHolder holder;
if (convertView == null ) {
convertView = mInflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.mTextView = (TextView)convertView.findViewById(R.id.ninegrid_number_list_choice);
holder.mTextView.setFocusable(false);
holder.mTextView.setClickable(false);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
holder.mTextView.setText(mList.get(position));
holder.mTextView.setTextColor(mTextColor);
holder.mTextView.setFocusable(false);
holder.mTextView.setClickable(false);
return convertView;
}
编辑: 在我的活动中:
listchoice.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
listChoice.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Log.v(tag, "sdf");
}
});
答案 0 :(得分:0)
在适配器的方法getView()上,您可以在返回之前设置convertView的onclick事件。 该事件处理程序可以视为onItemClick:)
答案 1 :(得分:0)
当我们使用按钮,图像按钮等时,listview点击监听器不工作。因为你只使用textview所以不会有这样的问题......
当您使用linearlayout时,无需在线性布局中使用android:focusable="false"
。
我们仅在使用按钮时使用此代码。也无需使用代码holder.mTextView.setClickable(false);
因为文本不是按钮所以它不需要任何焦点。单击它时,它将单击列表单元格而不是文本视图...
所以简单地膨胀,然后将自定义适配器设置为listview ...
setonitemclicklistner到列表视图....
更新的答案
convertView.setOnClickListener(new OnItemClickListener(position));
这肯定有用......
答案 2 :(得分:0)
我只是遇到了同样的问题,尝试了所有建议的解决方案,但没有一个对我有用。在尝试了不同的东西之后,我发现还有另一个原因导致我的问题。我将list_item包装在ScrollView
中,这导致我的onItemClick
无法被调用。我希望这对某人有帮助。
答案 3 :(得分:0)
似乎可以替代行点击的一件事是如果您具有textviews,请确保它们没有与之关联的android:inputtype 删除输入类型,然后单击行 这当然是上述答案的补充