无法使用imagebutton单击listview行

yit*_*al9 56 android listview imagebutton

我在listview上遇到了麻烦.它的项目(行)有图像按钮.imagebutton有"android:onClick"所以这个onclick事件正在运行,但点击行不起作用.如果我从行项目中删除图像按钮,单击行工作(列表视图具有正确的onclick列表器).我该如何解决?当用户点击图像按钮和标准点击事件时,我需要onclick事件,当用户选择行时(不单击图像按钮但单击该行)

我的列表视图:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/restaurants_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:divider="@color/list_devider"
        android:dividerHeight="1dp"
        android:cacheColorHint="@color/list_background" /> 
Run Code Online (Sandbox Code Playgroud)

Eli*_*iko 178

不幸,

android:focusable="false"
android:focusableInTouchMode="false"
Run Code Online (Sandbox Code Playgroud)

不起作用ImageButton.

我终于在这里找到了解决方案.在这些项目的布局xml中,添加

android:descendantFocusability="blocksDescendants" 
Run Code Online (Sandbox Code Playgroud)

到根视图.

它适用于ListViewImageButtons的.根据官方的参考,blocksDescendants意味着ViewGroup将阻止其后代获得焦点.

  • 对于`ToggleButton`,`android:focusable ="false"`就足够了但对于ImageButton只有`android:descendantFocusability ="blocksDescendants"`会起作用. (9认同)

Ang*_*elo 7

您可以为listView使用自定义适配器(如果尚未使用).在那里,在getView(int position, View inView, ViewGroup parent)适配器的方法做这样的事情:

@Override
public View getView(int position, View inView, ViewGroup parent) {

    View v = inView;
    ViewHolder viewHolder; //Use a viewholder for sufficent use of the listview

    if (v == null) {
        LayoutInflater inflater = (LayoutInflater) adaptersContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.list_item, null);
        viewHolder = new ViewHolder();
        viewHolder.image = (ImageView) v.findViewById(R.id.ImageView);
        v.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) v.getTag();
    }

        .....

    viewHolder.image.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            //Click on imageView
        }i
    });

    v.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            //Click on listView row
        }
    });

        .....

    return (v);
}
Run Code Online (Sandbox Code Playgroud)

如果您创建自定义适配器时需要帮助,请在此处


Moh*_*eem 6

如果ListView控件的一排有任何可点击的元素一样Button,Image..etc..then onItemClick将无法正常工作.因此,您需要在getView列表适配器中编写单击侦听器.

更多阅读.