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
        ...
    }
}

От моето неясно разбиране за това как трябва да работят контекстните менюта, очаквах информацията да съдържа идентификатора на db ред или поне 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