1

私はexpandListViewdiaryDisplaylistを持っています

これは、diaryDisplayListを埋めるために使用されるアダプターDiaryExpandListAdaptermAdapterForAllです。

これを行うコードスニペット:

    mAdapterForAll = new DiaryExpandListAdapter(this, diaryList);
    diaryDisplaylist.setAdapter(mAdapterForAll);

日記リストのタイプは次のとおりです。

    diaryList = new ArrayList<Object>();

diaryListには、データベースに存在するエントリの日付に従ってエキスパンドリストがグループ化された約8つのデータベースのすべてのアイテムが含まれます。完璧に表示されます。

これで、さまざまなデータベースに属する要素でいっぱいのエキスパンドリストができました。

だから私が使用した編集と削除機能のために

    diaryDisplaylist.setOnCreateContextMenuListener(this);

contextMenuのコードスニペット:

@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 == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {

        menu.add(0, Constants.MENU_EDIT, 0, "Edit");
        menu.add(0, Constants.MENU_DELETE, 1, "Delete");
    }
}

@Override
public boolean onContextItemSelected(android.view.MenuItem item) {

    ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();

    switch (item.getItemId()) {

    case Constants.MENU_EDIT:
        // once i get item belonging to respective database i can edit
        return true;

    case Constants.MENU_DELETE:

        return true;

    default:
        return super.onContextItemSelected(item);
    }
}

選択したcontextMenuItemで、そのアイテムが属するデータベースを見つけるにはどうすればよいですか?contextItemSelectedにgroupPositionとchildPositionがないため、アダプターを使用してオブジェクトを見つけることができません。私がそれらを手に入れることができれば、私は単に使うことができたでしょう。

Object selectedObject = mAdapterForAll.getChild(groupPosition, childPosition); 

次に、selectedObjectを使用して、私が見つけた可能性があります

if(selectedObject isInstanceOf db1)
4

2 に答える 2

1

私が使用したグループと子の位置を取得するには

Object obj = diaryList.get((int) info.packedPosition);

onContextItemSelectedでは機能しました。

于 2013-03-01T09:24:48.263 に答える
0

上記のコードにバグがありました。

int groupPos = 0, childPos = 0;
int type = ExpandableListView.getPackedPositionType(info.packedPosition);
if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
    groupPos = ExpandableListView
            .getPackedPositionGroup(info.packedPosition);
    childPos = ExpandableListView
            .getPackedPositionChild(info.packedPosition);
}
于 2013-04-03T15:51:44.810 に答える