1

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

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"); 
     } 

    } 

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

Edit:

Код для 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; 
     } 
    }; 
+0

Возможно, у вас возникли проблемы с переработкой элементов вашего списка в вашем адаптере. Не могли бы вы поделиться этим кодом? Благодаря! – rekaszeru

+0

Вот код адаптера, который я использую. Спасибо за помощь – rogerstone

+0

И что у вас есть в вашем 'viewBinder'? Вы могли бы использовать реализацию «BaseExpandableListAdapter», было бы намного яснее – rekaszeru

ответ

1

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

+0

У меня есть то, что я хотел. Я хотел знать, что именно неправильно с этим методом. – rogerstone

+0

Я использовал getExpandableListView.getChildAt (index) [где index = childpos], чтобы получить соответствующий вид, но он не дает я правильно смотрел всегда. Я думал, что это дает мне то, что я хотел, но я думаю, не всегда :). Идентификатор был именно тем, что я должен был использовать. Более того, целевое представление из контекстаMenuinfo дает вам представление, для которого используется контекстное меню Они были мне более чем полезны. Большое спасибо. – rogerstone

+1

Если вы используете стандартный механизм для _inflating_ просмотров в расширяемом списке, это, скорее всего, проблема. Они будут только раздувать представления в списке в первый раз и повторно использовать представления для последующих элементов. Таким образом, представление, которое вы получаете, почти наверняка не будет содержать данные, которые вы хотите :). –