我正在尝试创建一个可扩展的列表,其中包含由几个图像,文本视图和按钮组成的组项目。
图像和文本视图都放在一个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。