为什么我的ListView从不调用onItemClick?

时间:2014-02-11 03:03:01

标签: android listview

我在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");
 }
 });

4 个答案:

答案 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 删除输入类型,然后单击行 这当然是上述答案的补充