Фрагмент Menuitem Нажмите - PullRequest
       0

Фрагмент Menuitem Нажмите

0 голосов
/ 19 октября 2018
   public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_fragement, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

public boolean onOptionsItemSelected(MenuItem item) {
    Intent intent = new Intent();
    switch (item.getItemId()) {
        case R.id.color_menu:
            intent.setClass(rootView.getContext(), CandleColorActivity.class);
            getActivity().startActivityForResult(intent,COLOR_ACTION);
            break;
    }
    return super.onOptionsItemSelected(item);
}

При использовании приведенного выше кода элемент меню виден во фрагменте, но нажатие элемента не работает.Элемент меню xml:

<item
android:title="selectColor"
android:icon="@drawable/addcolor"
app:showAsAction="always"
android:id="@+id/color_menu"></item>

основное меню xml всегда отображается на каждом фрагменте

<item
android:title="menu"
android:icon="@drawable/menu"
app:showAsAction="always"
android:id="@+id/uper_menu"></item>

Java-код основного меню активности открывает диалоговое окно при нажатии элемента

   @Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case R.id.uper_menu:

            AlertDialog.Builder builder = new AlertDialog.Builder(context);
            builder.setView(R.layout.menu_dialog);
            alertDialog = builder.show();

            alertDialog.getWindow().setGravity(Gravity.BOTTOM);
            alertDialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
            alertDialog.getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);
            viewIds();
            break;
        default:
            break;
    }
    return true;
}

1 Ответ

0 голосов
/ 19 октября 2018

Вы не должны вызывать суперкласс 'onOptionsItemSelected(), если вы обработали событие самостоятельно.Поэтому измените ваш метод следующим образом:

public boolean onOptionsItemSelected(MenuItem item) {
    ...
    switch (item.getItemId()) {
        case R.id.color_menu:
            ...
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }           
}

EDIT

В фрагменте и действии, только возвращайте true, если вы обработали событие, в противном случае верните super.onOptionsItemSelected (item);

Причина в том, что система сначала запрашивает действие для обработки события, и если действие говорит, что оно обработало его (возвращая true), система больше не запрашивает фрагмент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...