2

こんにちは、データベースからエントリを削除する必要がある ContextMenu から ExpandableListView のアイテムの ID を取得する際に問題があります (コンテンツ プロバイダを使用しています)。

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    menu.add(Menu.NONE, MENU_EDIT, Menu.NONE, "Edit");
    menu.add(Menu.NONE, MENU_REMOVE, Menu.NONE, "Remove");
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuItem.getMenuInfo();
    switch (item.getItemId()) {
        case MENU_EDIT:
            editEntry(info.id);
            return true;
        case MENU_REMOVE:
            deleteEntry(info.id);
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}

private void deleteEntry(long id) {
    Uri uri = Uri.parse(DatabaseManager.CONTENT_URI + "/" + id);
    getActivity().getContentResolver().delete(uri, null, null);
}

ContextMenu が表示されていますが、[削除] をクリックしても何も起こりません。どうすればよいか教えていただけますか?

4

1 に答える 1

3

ExpandableListView にはグループと子の 2 つのレベルがあるため、「ID」を直接解釈することは困難です。

ExpandableListContextMenuInfo からの情報をグループ位置と子位置に分解する必要があります。

これら 2 つの値を使用して、ExpandableListView のデータ ソースとして使用したアダプター (ここではthis.exandableListAdapter )から選択したアイテムを取得できます。Adapter のgetChild()が返すオブジェクトは、最初に Adapter に入れた任意の (カスタム) タイプに変換できます。

ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuItem.getMenuInfo();
int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);
int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);
MyItemClass item =(MyItemClass) this.expandableListAdapter.getChild(groupPos, childPos);

この項目から、データベース内の ID や必要な特定の情報を簡単に取得できるはずです。

于 2014-11-11T17:51:53.673 に答える