Проблемы с ContextMenu в ExpandableListActivity - PullRequest
1 голос
/ 30 апреля 2011

В ExpandableListActivity я зарегистрировал ContextMenu.Я пытаюсь сохранить данные дочернего элемента списка группы, для которой нажата ContextMenu.Согласно:

onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo)

v - представление, для которого создается контекстное меню.Таким образом, это представление должно быть тем элементом списка, на который я щелкаю, но это не так, это относится к первому элементу списка в дочернем списке.Я считаю, что он должен возвращать вид элемента списка, для которого построено контекстное меню, но здесь это не так.Вот мой код:

public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("My Crumbs");

        TextView rowid = (TextView) v
                .findViewById(R.id.trackdetails_item_row_id);
        rowId = rowid.getText().toString();

        ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuInfo;
        int type = ExpandableListView
                .getPackedPositionType(info.packedPosition);

        // Only create a context menu for the child
        if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {

            TextView trackstats = (TextView) v
                    .findViewById(R.id.trackdetails_item_stats);
    menu.add(0, MENU_SHARE, 0, "Share on Facebook");
        }

    }

Может кто-нибудь пролить свет на это?

Редактировать:

Код для ExpandableListAdapter:

public class MyExpandableListAdapter extends SimpleCursorTreeAdapter {

        public MyExpandableListAdapter(Cursor cursor, Context context,
                int groupLayout, int childLayout, String[] groupFrom,
                int[] groupTo, String[] childrenFrom, int[] childrenTo) {
            super(context, cursor, groupLayout, groupFrom, groupTo,
                    childLayout, childrenFrom, childrenTo);
            setViewBinder(viewBinder);
        }

        @Override
        protected Cursor getChildrenCursor(Cursor groupCursor) {
            // TODO Auto-generated method stub
            String crumbName = groupCursor.getString(mCrumbNameColumnIndex);
            return crumpareDBAdapter.getTrackList(mTracksProjection, crumbName);
        }

        @Override
        public SimpleCursorTreeAdapter.ViewBinder getViewBinder() {
            return viewBinder;
        }

    }

Код для ViewBinder:

SimpleCursorTreeAdapter.ViewBinder viewBinder = new ViewBinder() {

        @Override
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
            // TODO Auto-generated method stub
         TextView textView = (TextView) view;
         textView.setText(cursor.getString(columnIndex));
            return true;
        }
    };

1 Ответ

1 голос
/ 30 апреля 2011

Вы также можете получить идентификатор дочернего элемента из ContextMenuInfo, не полагаясь на представление. См. документацию , так как она должна иметь то, что вы хотите.

...