Неподходящее контекстное меню во фрагменте

У меня есть действие с навигационным ящиком и фрагментом. У каждого из них есть свой ListView с контекстным меню.

Контекстное меню внутри навигационного ящика работает нормально.

Проблема с меню внутри фрагмента. Когда я вхожу в контекстное меню фрагмента, отображается ОБА меню навигационного ящика И меню фрагмента.

Методы действия

@Override
protected void onCreate(Bundle savedInstanceState) {
    registerForContextMenu(mDrawerList); // mDrawrList is the navigation drawer's ListView
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    switch(item.getItemId()) {
    case R.id.action_edit:
        // Do some stuff
        return true;
    case R.id.action_delete:
        // Do some stuff
        return true;
    }
    return super.onContextItemSelected(item);
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.drawer, menu);
}

Методы фрагмента

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    setHasOptionsMenu(true);
    mListView = (ListView) view.findViewById(R.id.list);
    registerForContextMenu(mListView);
    // ...
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    switch(item.getItemId()) {
    case R.id.action_edit:
        // Do some stuff
        return true;
    case R.id.action_delete:
        // Do some stuff
        return true;
    }
    return super.onContextItemSelected(item);
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    getActivity().getMenuInflater().inflate(R.menu.fragment_menu, menu);
}

Заранее спасибо.


person Dennis    schedule 29.12.2013    source источник
comment
Возможно, вам будет лучше использовать меню режима действий.   -  person Kuffs    schedule 29.12.2013
comment
Почему? Только для вариантов Edit и Delete?   -  person Dennis    schedule 29.12.2013


Ответы (2)


Решено.

Проблема заключалась в том, что была вызвана активность onCreateContextMenu.

Я только что удалил super.onCreateContextMenu(menu, v, menuInfo); из метода onCreateContextMenu фрагмента.

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {

    getActivity().getMenuInflater().inflate(R.menu.fragment_menu, menu);
}

Надеюсь, это поможет кому-то.

person Dennis    schedule 01.01.2014

Спасибо Денис за код.

вам не нужно это в вашем фрагменте:

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    switch(item.getItemId()) {
    case R.id.action_edit:
        // Do some stuff
        return true;
    case R.id.action_delete:
        // Do some stuff
        return true;
    }
    return super.onContextItemSelected(item);
}

I

person UnicornDonauera    schedule 02.11.2020