我正在尝试创建一个可扩展的列表,其中包含由几个图像,文本视图和按钮组成的组项目。

图像和文本视图都放在一个RelativeLayout中,并且touchevents都可以正常工作,所以一切都很好。然后,我决定在水平LinearLayout中添加一个由3个按钮组成的Button栏,基本上创建了一个嵌套布局。但是现在,组项目不再响应触摸事件。

我敢肯定这与适配器中列表视图的膨胀方式有关,但是我不知道如何正确执行此操作。

如果有人可以帮助我,我将非常高兴!

这是组元素XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="3dp"
    android:paddingLeft="3dp"
    android:paddingRight="3dp"
    android:paddingTop="20dp">


    <ImageView
        android:id="@+id/item1"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:background="#828080"
        android:focusable="false" />

    <TextView
        android:id="@+id/item2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/item1"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"
        android:text=""
        android:textSize="20dp" />

    <TextView
        android:id="@+id/item3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/item2"
        android:paddingBottom="5dp"
        android:text="" />

    <TextView
        android:id="@+id/item4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/item5"
        android:layout_alignTop="@+id/item5"
        android:layout_toEndOf="@id/item5"
        android:layout_toRightOf="@id/item5"
        android:paddingBottom="5dp"
        android:text="" />

    <TextView
        android:id="@+id/item5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/item3"
        android:layout_alignTop="@+id/item3"
        android:layout_toEndOf="@id/item3"
        android:layout_toRightOf="@+id/item3"
        android:paddingBottom="5dp"
        android:text="on" />

    <TextView
        android:id="@+id/item6"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/item3"
        android:text=""
        android:textSize="15dp" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/item6"
        android:orientation="horizontal">

        <ImageButton
            android:id="@+id/button1"
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:layout_margin="0dp"
            android:layout_weight="1"
            android:background="#c3d69b"
            android:padding="0dp"
            android:src="@drawable/myDrawable1" />

        <ImageButton
            android:id="@+id/button2"
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:layout_margin="0dp"
            android:layout_weight="1"
            android:background="#c3d69b"
            android:padding="0dp"
            android:src="@drawable/myDrawable2" />

        <ImageButton
            android:id="@+id/button3"
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:layout_margin="0dp"
            android:layout_weight="1"
            android:background="#c3d69b"
            android:padding="0dp"
            android:src="@drawable/myDrawable3" />

    </LinearLayout>



</RelativeLayout>


编辑

我找到了更适合我的解决方法。只需将听众分配给不同的项目就可以了。这段代码是我在Adapter内为expandablelistview添加的

@Override
    protected View newGroupView(Context context, Cursor cursor, boolean isExpanded, ViewGroup parent) {
        //Log.d(TAG, "newGroupView");
        //DatabaseUtils.dumpCursor(cursor);

        final View view = mInflater.inflate(R.layout.group_list_item, parent, false);

        image = (ImageView) view.findViewById(R.id.imageview);
        button1 = (ImageButton) view.findViewById(R.id.button_1);
        button2 = (ImageButton) view.findViewById(R.id.button_2);
        button3 = (ImageButton) view.findViewById(R.id.button_3);

        image .setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "image clicked");
            }
        });

        button1 .setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "button1 clicked");
            }
        });

        button2 .setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "button2  clicked");
            }
        });

        button3 .setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "button3  clicked");

            }
        });

        return view;
    }

最佳答案

在添加的列表视图的适配器内部:

@Override
public View getGroupView(final int groupPosition, final boolean isExpanded, View convertView, final ViewGroup parent) {
    if(convertView == null) {
        LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.list_item, parent, false);
    }

    ImageButton button1 = (ImageButton) convertView.findViewById(R.id.button_1);

    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(isExpanded) ((ExpandableListView) parent).collapseGroup(groupPosition);
            else ((ExpandableListView) parent).expandGroup(groupPosition);
        }
    });

    return convertView;
}


这样,您可以为所需的任何元素设置Onclicklisteners。

07-27 22:40