1

BaseExpandableListAdapter を拡張して、展開されたリスト ビューにデータを入力しています。
ChildView のコード:

public View getChildView(final int groupPosition, final int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {

LayoutInflater in=getLayoutInflater();
convertView=in.inflate(R.layout.details, null);
//set text for various TextViews from ArrayList1 
return convertView;
}

GroupView のコード:

public View getGroupView(final int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
LayoutInflater li= getLayoutInflater();
convertView=li.inflate(R.layout.list, null);
//add data to ArrayList1 and set text for various TextViews
return convertView;
}

グループが展開され、後続のグループのいずれかを長押しすると、onItemLongClick メソッドはパラメーター itemIndex の (実際のインデックス + 1) 値を取得します。このため、arrayindexoutofbounds 例外が発生します。

elview.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                final int itemIndex, long arg3) {
Log.e("index selected", itemIndex+"");
return false;
}});

ここで何か不足していますか?

4

1 に答える 1

2

コンテキストメニューにアダプタを登録していないようです...

これが私が問題なくそれをした方法からのビットです:

アダプターの作成

    mAdapter = new MyExpandableListAdapter(mGroupsCursor, getActivity(),
            R.layout.explistlayout,
            R.layout.explistlayout1,
            new String[] { "_id" },
            new int[] { android.R.id.text1 },
            new String[] { child },
            new int[] { android.R.id.text1 });
    lv.setAdapter(mAdapter);
    registerForContextMenu(lv);

コンテキストメニューとアクション

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;
    int type = ExpandableListView.getPackedPositionType(info.packedPosition);
    if (type == 1) {
        menu.setHeaderTitle("Event Operations");
        menu.add(0, v.getId(), 0, "Edit Event");
        menu.add(0, v.getId(), 0, "Delete Event");
    }
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();
    if (item.getTitle() == "Edit Event") {
        mRowId = info.id;
        EventAddFragment eventadd = new EventAddFragment();
        getFragmentManager().beginTransaction()
                .replace(R.id.rightpane, eventadd).commit();
    } else if (item.getTitle() == "Delete Event") {
        mDbHelper.deleteEvent(info.id);
        mGroupsCursor.requery();
        return true;
    }
    return super.onContextItemSelected(item);
}

詳細については、このSOの質問を確認することもできます。

お役に立てれば。

于 2012-04-29T06:00:29.023 に答える