Android:-Custom ExpandableListView:无法展开组项目以在CustomListView中显示子项目 [英] Android :- Custom ExpandableListView : cannot expand group item to display child item in CustomListView

查看:120
本文介绍了Android:-Custom ExpandableListView:无法展开组项目以在CustomListView中显示子项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在SherlockFragment中实现自定义ExpandableListView。我按照此 sample 进行了扩展BasepandableListAdapter并创建我的自定义适配器。

I'm trying to implement a custom ExpandableListView inside a SherlockFragment. I followed this sample to extend BaseExpandableListAdapter and create my custom adapter.

这是我的问题,当我的可扩展列表显示在屏幕上时,我可以看到所有组项目,但是当我单击其中一个,应该显示在其下的子项不会显示


  1. 我尝试调试它,从来没有调用过我放在适配器中的onGroupExpandListener,实际上我在适配器的不同方法中设置了断点,当我单击组项目之一时就永远不会调用它。

  1. I tried to debug it, the onGroupExpandListener I put in the adapter is never called, and actually I put breakpoints in the different methods of my adapter, there are not called ever when I click on one of the group item.

我试图修改定义组项目和子项目的xml文件,以使它们可单击或可聚焦,而没有进行任何更改。我还试图删除我放入其中的editText,Button和CheckBox,以为这可能会造成冲突...

I tried to modify my xml files which define the group item and the child item, to make them clickable or focus-able, nothing changed. I also tried to remove the editText, Button, and CheckBox I put in there, thinking it was may be creating a conflict ...

我认为是问题所在可能是由于使用带有SherlockFragment的ExpandableListView的某些不兼容问题,但根据开发人员的论坛不是。

I thought the problem was may be due to some incompatibility issues using ExpandableListView with SherlockFragment, but according to the developer's forum its not.

所以我真的不知道现在在哪里看可能只是我在适配器中犯的菜鸟错误...
任何帮助都将非常有用,

So I really don't know where to look now, it's may be simply a rookie mistake I did in my adapter... Any help would be great,

在此先感谢!

这是我的代码:

public class BuildingExpandalbeListAdapter extends BaseExpandableListAdapter {

private Context mContext;
private ExpandableListView mExpandableListView;
private SideEntity[] mSidesCollection;
private int[] groupStatus;

public BuildingExpandalbeListAdapter(Context pContext,
        ExpandableListView pExpandableListView,
        SideEntity[] pSidesCollection) {
    mContext = pContext;
    mSidesCollection = pSidesCollection;
    mExpandableListView = pExpandableListView;
    groupStatus = new int[mSidesCollection.length];
    mExpandableListView.setClickable(true);     
    setListEvent();
}

private void setListEvent() {

    mExpandableListView
            .setOnGroupExpandListener(new OnGroupExpandListener() {

                @Override
                public void onGroupExpand(int arg0) {
                    // TODO Auto-generated method stub
                    groupStatus[arg0] = 1;
                }
            });

    mExpandableListView
            .setOnGroupCollapseListener(new OnGroupCollapseListener() {

                @Override
                public void onGroupCollapse(int arg0) {
                    // TODO Auto-generated method stub
                    groupStatus[arg0] = 0;
                }
            });
}

@Override
public Object getChild(int groupPosition, int childPosition) {
    return mSidesCollection[groupPosition].getSegmentEntity(childPosition)
            .getName();
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    return mSidesCollection[groupPosition].getSegmentEntity(childPosition)
            .getId();
}

@Override
public View getChildView(int groupPosition, int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ChildHolder childHolder;
    if (convertView == null) {
        convertView = LayoutInflater.from(mContext).inflate(
                R.layout.building_list_item, null);

        childHolder = new ChildHolder();

        childHolder.editText1 = (EditText) convertView
                .findViewById(R.id.editText1);
        childHolder.checkBox1 = (CheckBox) convertView
                .findViewById(R.id.checkBox1);
        convertView.setTag(childHolder);
    } else {
        childHolder = (ChildHolder) convertView.getTag();
    }

    childHolder.editText1.setText(mSidesCollection[groupPosition]
            .getSegmentEntity(childPosition).getName());
    childHolder.checkBox1.setChecked(mSidesCollection[groupPosition]
            .getSegmentEntity(childPosition).hasDoor());
    return convertView;
}

@Override
public int getChildrenCount(int groupPosition) {
    // TODO Auto-generated method stub
    return mSidesCollection[groupPosition].getSegmentsCollection().size();
}

@Override
public Object getGroup(int groupPosition) {
    // TODO Auto-generated method stub
    return mSidesCollection[groupPosition];
}

@Override
public int getGroupCount() {
    // TODO Auto-generated method stub
    return mSidesCollection.length;
}

@Override
public long getGroupId(int groupPosition) {
    // TODO Auto-generated method stub
    return groupPosition;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    GroupHolder groupHolder;
    if (convertView == null) {
        convertView = LayoutInflater.from(mContext).inflate(
                R.layout.building_list_group, null);
        groupHolder = new GroupHolder();
        groupHolder.editText1 = (EditText) convertView
                .findViewById(R.id.editText1);
        groupHolder.editText2 = (EditText) convertView
                .findViewById(R.id.editText2);
        convertView.setTag(groupHolder);
    } else {
        groupHolder = (GroupHolder) convertView.getTag();
    }

    groupHolder.editText1
            .setText(mSidesCollection[groupPosition].getName());
    groupHolder.editText2.setText(Integer
            .toString(mSidesCollection[groupPosition]
                    .getSegmentsCollection().size()));

    return convertView;
}

class GroupHolder {
    EditText editText1;
    EditText editText2;
}

class ChildHolder {
    EditText editText1;
    CheckBox checkBox1;
}

@Override
public boolean hasStableIds() {
    // TODO Auto-generated method stub
    return true;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    // TODO Auto-generated method stub
    return true;
}

}

这是我使用此适配器的SherlockFragment :

Here is my SherlockFragment using this adapter :

public class BuildingFragment extends SherlockFragment {

private ViewGroup myViewGroup;
private View v;
private SideEntity[] mSideCollection;

private BuildingsDbAdapter buildingDataBase;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    if (container == null) {
        return null;
    }
    myViewGroup = container;
    myViewGroup.removeAllViews();
    v = inflater.inflate(R.layout.building_data_layout, container, false);
    buildingDataBase = new BuildingsDbAdapter(getSherlockActivity());
    return v;
}

@Override
public void onResume() {
    super.onResume();
    buildingDataBase.open();
    mSideCollection = BuildingsDbAdapter
            .fetchSideMatchingBuildingId(CustomTabFragmentActivity.mBuildingId);
    for (int i = 0; i < mSideCollection.length; i++) {
        BuildingsDbAdapter.fetchSegmentMatchingSideId(
                mSideCollection[i].getId(), mSideCollection[i]);
    }
    ExpandableListView mExpandableListView = (ExpandableListView) v
            .findViewById(R.id.expandableListView1);
    BuildingExpandalbeListAdapter mAdapter = new BuildingExpandalbeListAdapter(
            v.getContext().getApplicationContext(), mExpandableListView,
            mSideCollection);
    mExpandableListView.setAdapter(mAdapter);
    buildingDataBase.close();
}
}

这是我的xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_gravity="left|center_vertical"
        android:layout_marginLeft="10dip"
        android:layout_weight="3"
        android:singleLine="true"
        android:text="Building name: "
        android:textColor="@android:color/black"
        android:textSize="13dip" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_gravity="left|center_vertical"
        android:layout_marginLeft="10dip"
        android:layout_weight="4"
        android:singleLine="true"
        android:text="Columbia Tower"
        android:textColor="@android:color/black"
        android:textSize="15dip"
        android:textStyle="italic" />

   <!--  <Button
        android:id="@+id/button1"
        android:layout_width="0dip"
        android:layout_height="30dp"
        android:layout_gravity="right|center_vertical"
        android:layout_marginRight="10dip"
        android:layout_weight="1"
        android:background="@color/honeycombish_blue"
        android:drawableTop="@drawable/edit_query"
        android:gravity="center_vertical|center_horizontal" /> -->
</LinearLayout>

<ExpandableListView
    android:id="@+id/expandableListView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:scrollbars="none"
    android:divider="@android:color/black"
    android:clipChildren="false"
    android:focusable="true" >
</ExpandableListView>

</LinearLayout>

group_item:

the group_item :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:gravity="center_vertical"
android:orientation="vertical" >

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/RelativeLayout"
    android:layout_marginTop="6dip"
    android:layout_toLeftOf="@+id/button1"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_gravity="left|center_vertical"
        android:layout_marginLeft="5dip"
        android:layout_weight="2"
        android:singleLine="true"
        android:text="Side: "
        android:textColor="@android:color/black"
        android:textSize="13dip" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_gravity="left|center_vertical"
        android:layout_marginLeft="5dip"
        android:layout_weight="2"
        android:singleLine="true"
        android:textColor="@android:color/black"
        android:textSize="15dip"
        android:textStyle="italic" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_gravity="left|center_vertical"
        android:layout_marginLeft="5dip"
        android:layout_weight="5"
        android:singleLine="true"
        android:text="Number of Segment:"
        android:textColor="@android:color/black"
        android:textSize="13dip" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_gravity="left|center_vertical"
        android:layout_marginLeft="5dip"
        android:layout_weight="2"
        android:ems="10"
        android:inputType="number"
        android:text="0"
        android:textSize="13dip" />
</LinearLayout>

<Button
    android:id="@+id/button1"
    android:layout_width="30dip"
    android:layout_height="30dip"
    android:layout_alignBottom="@+id/linearLayout1"
    android:layout_alignParentRight="true"
    android:layout_marginLeft="2dip"
    android:background="@android:color/transparent"
    android:drawableBottom="@drawable/ic_edit_shape"
    android:gravity="bottom|center_horizontal" />

</RelativeLayout>

list_item:

the list_item :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:orientation="vertical" >

<Button
    android:id="@+id/button1"
    android:layout_width="30dip"
    android:layout_height="30dip"
    android:layout_alignBottom="@+id/linearLayout1"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="2dip"
    android:background="@android:color/transparent"
    android:drawableBottom="@drawable/ic_edit_shape"
    android:gravity="bottom|center_horizontal" />

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/RelativeLayout"
    android:layout_marginTop="6dip"
    android:layout_toRightOf="@+id/button1"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_gravity="left|center_vertical"
        android:layout_marginLeft="5dip"
        android:layout_weight="2"
        android:singleLine="true"
        android:text="Name: "
        android:textColor="@android:color/black"
        android:textSize="13dip" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_gravity="left|center_vertical"
        android:layout_marginLeft="5dip"
        android:layout_weight="2"
        android:singleLine="true"
        android:text="Shop1"
        android:textColor="@android:color/black"
        android:textSize="15dip"
        android:textStyle="italic" />

    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="0dip"
        android:layout_height="30dip"
        android:layout_weight="1"
        android:hint="Door" />
</LinearLayout>

</RelativeLayout>


推荐答案

好吧,我发现了我的错误,实际上是问题所在来自我在组项目中一直使用的EditText和Button。当我将此窗口小部件设置为不可点击且不可聚焦时,对我的网上论坛项目的点击正常执行。

Ok I find my mistake, the problem was in fact coming from both EditText and the Button I have been using in my group items. When I set this widgets to non clickable and non focusable the click on my group items perform normally.

我应该早点检测到此冲突,我曾尝试过同时删除Button和EditText,但是我忘记了在某些时候我曾尝试将 android:clickable = true 添加到我的RelativeLayout中(考虑一下)会允许我点击我的群组项目),但同时也造成了冲突:/
无论如何,如果有人遇到类似的问题,请记住要检查您的群组项目内的任何视图是否可点击或可聚焦并将它们设置为 android:clickable = false android:focusable = false

I should have detected this conflict sooner, I tried before to remove both my Button and my EditText, but i forgot that at some point I had try to add android:clickable="true" to my RelativeLayout (thinking it would allowed the click on my group items) but instead it has also created a conflict :/ Anyway, if someone has a similar problem, keep in mind to check if any of your view inside your group item is clickabble or focusable and set them to android:clickable="false" android:focusable="false"

这篇关于Android:-Custom ExpandableListView:无法展开组项目以在CustomListView中显示子项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆