android slidingmenu和expandablelistview无法正常工作

时间:2013-03-28 01:21:40

标签: android expandablelistview slidingmenu

---更新如下---

我在ExpandableListView片段中显示SlidingMenu(ELV)时遇到问题。片段加载正常,如果我使用ListView没有问题。我已经实现了一个自定义适配器来加载组和子项的视图,并且在正常活动中加载ELV时,一切都按预期工作。

我已经调试了很长时间并且绘制了实际的ELV(我将背景设置为全红色,并且它显示了我预期的位置),但是不绘制组和子元素。加载带有滑动菜单的活动时(如getGroupView),将调用适配器中的所有相关方法。 任何人都可以帮助我让实际的团体和孩子们在SlidingMenu中展示吗?

这是我在布局XML中的ELV:

<ExpandableListView
    android:id="@+id/trackermenutypes_explist"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:transcriptMode="disabled"
    android:layout_gravity="right"
    android:layout_margin="15dp"
/>

适配器中获取视图的方法:

   @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.listitem_typegroup, null);
        }
        ((TextView) convertView.findViewById(R.id.listitem_typegroup_name)).setText(mTypeGroups.get(groupPosition).getName());
        Log.d(TAG, "Returning GroupView for group \"" + mTypeGroups.get(groupPosition).getName() + "\"");
        return convertView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.listitem_type, null);
        }
        ((TextView) convertView.findViewById(R.id.listitem_type_name)).setText(mGroupedTypes.get(groupPosition).get(childPosition).getName());
        Log.d(TAG, "Returning ChildView for type \"" + mGroupedTypes.get(groupPosition).get(childPosition).getName() + "\"");
        return convertView;
    }

我的片段onActivityCreated方法(工作ListView在底部注释掉):

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    Log.d(TAG, "onActivityCreated");
    super.onActivityCreated(savedInstanceState);
    mContext = (TrackerActivity) getActivity();
    //lTypesList = getListView();
    lExpList = (ExpandableListView)mContext.findViewById(R.id.trackermenutypes_explist);
    mPrefs = PreferenceManager.getDefaultSharedPreferences(mContext);

    mTypeGroupDataSource = new TypeGroupDataSource(mContext);
    mTypeGroupDataSource.open();
    mTypeGroups = mTypeGroupDataSource.getAllTypeGroups();

    mTypeDataSource = new TypeDataSource(mContext);
    mTypeDataSource.open();
    mTypes = mTypeDataSource.getTypesOfClub(DataService.DEFAULT_CLUB_ID);
    mTypes.addAll(mTypeDataSource.getTypesOfClub(mPrefs.getLong(DataService.PREFS_CLUB_ID, -1)));

    TypeAdapter typeAdapter = new TypeAdapter(mContext, mTypeGroups, mTypes);
    lExpList.setAdapter(typeAdapter);

    lExpList.setOnChildClickListener(new OnChildClickListener() {
        @Override
        public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
            mContext.updateCurrentType(id);
            mContext.getSlidingMenu().toggle();
            return true;
        }
    });
    Log.d(TAG, "Expanding " + typeAdapter.getGroupCount() + " groups");
    for (int i = 0; i < typeAdapter.getGroupCount(); i++){
        lExpList.expandGroup(i);
    }
    //TODO Implement "Add Type" feature
    /*ArrayAdapter<TypeData> typeAdapter = new ArrayAdapter<TypeData>(mContext, R.layout.listitem_type, R.id.listitem_type_name, mTypes);
    setListAdapter(typeAdapter);

    lTypesList.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View item, int position, long id) {
            mContext.updateCurrentType(position);
            mContext.getSlidingMenu().toggle();
        }
    });*/
}

--- --- UPDATE 通过使我的片段成为ListFragment并使用setList,我找到了一种方法来绘制组和项目。这是一种黑客,因为现在,例如setAdapter不能与我的自定义BaseExpandableListAdapter一起使用。当我在实际列表(来自findViewByID)上调用它时,它不会对触摸事件做出反应。所以现在我有一个漂亮的清单,不能使用。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我似乎找不到任何关于让ExpandableListView在SlidingMenu中显示而没有“黑客”并使用ListFragment的答案 - 这导致无法在片段上使用stadndard setAdapter来设置ExpandableListAdapter。如果可用,也许ExpandableListFragment可以解决问题。

对触摸事件没有反应的更新错误是我自己的错 - 我在适配器isChildSelectable方法中返回false。