1

---以下更新---

SlidingMenuフラグメント内のExpandableListView (ELV)の表示に問題があります。フラグメントは正常にロードされ、ListView を使用しても問題はありません。グループと子アイテムのビューをロードするカスタム アダプターを実装しました。通常のアクティビティで ELV がロードされると、すべてが期待どおりに機能します。

私は何年もデバッグしてきましたが、実際の ELV は描画されます (背景をすべて赤に設定すると、期待した場所に表示されます) が、グループと子要素は描画されません。アダプター内の関連するすべてのメソッドは、slidingmenu を含むアクティビティが読み込まれると呼び出されます (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();
        }
    });*/
}

---更新--- フラグメントを ListFragment にし、代わりに setList を使用して、グループとアイテムを描画する方法を見つけました。たとえば、setAdapter がカスタム BaseExpandableListAdapter で機能しないなど、これは一種のハックです。実際のリストで(findViewByIDから)呼び出すと、タッチイベントに反応しません。これで、使用できない美しいリストができました。助言がありますか?

4

1 に答える 1

0

ExpandableListView を「ハッキング」して ListFragment を使用せずに SlidingMenu に表示する方法については、答えが見つからないようです。その結果、フラグメントで標準の setAdapter を使用して ExpandableListAdapter を設定できなくなります。可能であれば、ExpandableListFragment が問題を解決する可能性があります。

タッチ イベントに反応しない更新されたバグは、私自身の問題でした。アダプターの isChildSelectable メソッドで false を返していました。

于 2013-03-29T16:09:03.570 に答える