MenuIntem getMenuInfo() возвращает null при создании контекстного меню

Я пытаюсь понять руководство по Android API для создания контекстных меню, но они действительно не дают никаких объяснений того, как предполагается использовать AdapterContextMenuInfo.

Мой код:

import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.internal.widget.IcsAdapterView.AdapterContextMenuInfo;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
...

public class MyActivity extends SherlockActivity {}
    ...
    class MyCursorAdapter extends CursorAdapter {
        ...
        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            View rowView = inflater.inflate(R.layout.list_row, parent, false);
            registerForContextMenu(rowView);
            return rowView;
        }
    }
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        android.view.MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context, menu);
    }

    @Override
    public boolean onContextItemSelected(android.view.MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();
        Log.d(MyApp.LOG_TAG, "info is null: "+ (info == null)); // info is null: true
        ...
    }
}

Из моего смутного понимания того, как должны работать контекстные меню, я ожидал, что информация будет содержать идентификатор строки базы данных или, по крайней мере, targetView, из которого я мог бы получить идентификатор в виде тега.

Пожалуйста, дайте мне знать, где я ошибаюсь или как еще я могу определить, для какого элемента ListView отображалось контекстное меню.


person fir3wired    schedule 13.07.2013    source источник


Ответы (1)


android - почему item.getMenuInfo имеет значение null

Спрашивающий не пометил это как принятый ответ, поэтому я не знаю, решило ли это его проблему, но похоже, что вы делаете то же самое, что и он.

Зарегистрируйте меню как контекстное меню, а не как элементы строки.

person John Moffitt    schedule 13.07.2013
comment
В соответствии с этим ответом я должен вызвать registerForContextMenu, передав его в свой ListView, который поддерживается CursorAdapter. Однако, когда я это делаю, действия длительного нажатия вообще не регистрируются даже после отвязки всех прослушивателей кликов от представлений в каждой строке ListView. - person fir3wired; 14.07.2013