Listview onClickListener 在抽屉布局中不起作用

Listview onClickListener is not working in Drawer Layout

我正在做一个抽屉,里面有 ListView。但令人惊讶的是,当我单击任何列表项时,它没有触发任何 onClickListener

到目前为止我已经尝试过这些东西

还有布局,我也试过这些方法

尝试了上面的每个案例,直到现在我都没有任何工作。我想代码运行良好,但布局可能存在一些问题,但尝试了一切我仍然一无所知。

这是我当前的项目布局

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:descendantFocusability="blocksDescendants">

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/image"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/image"
        android:text="@string/app_label"
        android:paddingTop="14dp"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <ImageView
        android:contentDescription="@string/app_label"
        android:id="@+id/image"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:padding="10dp"
        android:src="@drawable/thumb" />

</RelativeLayout>

这是我的自定义适配器

/****** Depends upon data size called for each row , Create each ListView row *****/
@SuppressLint("SimpleDateFormat")
public View getView(final int position, View convertView, ViewGroup parent) {
    View vi = convertView;
    final ViewHolder holder;

    if (convertView == null) {

        /****** Inflate tabitem.xml file for each row ( Defined below ) *******/
        vi = inflater.inflate(R.layout.drawer_list_item, null);

        /****** View Holder Object to contain tabitem.xml file elements ******/

        holder = new ViewHolder();
        holder.text = (TextView) vi.findViewById(R.id.text);
        holder.image = (ImageView) vi.findViewById(R.id.image);

        /************ Set holder with LayoutInflater ************/
        vi.setTag(holder);

    } else {
        holder = (ViewHolder) vi.getTag();
    }

    if (data.size() <= 0) {
        holder.text.setText("No Music Found!");

    } else {
        tempValues = null;
        tempValues = (ListModel) data.get(position);
        String txt = tempValues.getCompanyName().toString();
        holder.text.setText(txt);
        vi.setOnClickListener(new OnItemClickListener(position));
        // Set Values and listeners her

    }

    return vi;
}

/********* Called when Item click in ListView ************/
private class OnItemClickListener implements OnClickListener {
    private int mPosition;

    OnItemClickListener(int position) {
        mPosition = position;
    }

    @Override
    public void onClick(View arg0) {
        Toast.makeText(activity, "rgrg", Toast.LENGTH_SHORT).show();
        HomeActivity sct = (HomeActivity) activity;
        sct.onDrawerItemClick(mPosition);
    }
}

@Override
public void onClick(View arg0) {
    // Default onClick
    Toast.makeText(activity, "rgrg", Toast.LENGTH_SHORT).show();

}

@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
    Log.i("Long", "msg");
    return true;
}

这是我的 activity

mPlanetTitles = getResources().getStringArray(R.array.planets);
    mDrawerList = (ListView) findViewById(R.id.left_drawer);

    // Set the adapter for the list view
    setListData();
    DrawerAdapter adapter = new DrawerAdapter(this,
            CustomListViewValuesArr, getResources());
    mDrawerList.setAdapter(adapter);
    mDrawerList.setClickable(true);

这里是 activity even

中的监听器
public void onDrawerItemClick(int mPosition) {
    // TODO Auto-generated method stub
    Toast.makeText(getApplicationContext(), "fgsg", Toast.LENGTH_SHORT).show();
}

没有日志也没有 Toast,这表明没有点击任何内容。尝试了很多之后,决定向你们寻求帮助!

编辑

我做了一些进一步的查找,看看发生了什么,并在 listview 中添加了 button。在抽屉中,按钮甚至没有获得 onPressed 颜色并且在按下它时悬停。总而言之,布局反应迟钝或不提供任何反馈。

在你的 RelativeLayout 中设置 android:clickable="true"。或者,更好的方法是在 ListView.

上设置 OnItemClickListener
yourListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // TODO: do your stuff
    }
});

不要将点击侦听器放在视图上,而是在初始化后在 relativelayout 上进行

您需要通过ListView.setOnItemClickListener(...)

设置列表项点击监听器

感谢大家对这个问题提出的建议。但是我已经找到了这种异常行为的原因。这是因为在 Activity 的 XML 文件(不是项目列表 XML)中定义了 RelativeLayout(外部抽屉布局)。在删除该代码时,点击就像魅力一样。 :) 抱歉没有在此处包含该代码..

您必须在抽屉列表视图上方的 FrameLayout 中设置一个片段,而不是相对布局!