Android Studio: invalidateOptionsMenu () заставляет перестать работать всегда видимые элементы - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь скрыть / показать всегда видимый элемент (app:showAsAction="always") меню после выключения / включения коммутатора.

Проблема:

, если я использую invalidateOptionsMenu() in onPrepareOptionsMenu(), мои searchView и кнопка сохранения menu.findItem(R.id.save_product_option) перестают работать.Они видны, но не отвечают на щелчок.

Если я не использую invalidateOptionsMenu(), элементы работают должным образом.Но кнопка save становится скрытой (menu.findItem(R.id.save_product_option).setVisible(false)), только когда я нажимаю на само меню (три точки).

Я хочу скрыть / показать кнопку save (как стрелка на рисунке внизу), как только я включу / выключу Switch, сохраняя их функции.

Только элементы app:showAsAction="never" работают нормально.

Вот такЯ установил isSwitchChecked в onCreate, чтобы определить, будет ли кнопка save скрыта / показана.

    mAddProductField.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                mProductFormField.setVisibility(View.VISIBLE);
                Log.i("debinf product", "is switch checked true "+isChecked);
                isSwitchChecked = true;
            } else {
                mProductFormField.setVisibility(View.GONE);
                Log.i("debinf product", "is switch checked false "+isChecked);
                isSwitchChecked = false;
            }
        }
    });

Ниже показано, как я реализовал меню items .

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.options_product,menu);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    searchView = (SearchView) menu.findItem(R.id.search_product_option).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setQueryHint("Pesquisar...");

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

        @Override
        public boolean onQueryTextSubmit(String s) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String s) {
            if (s.isEmpty()) {
                //mProductListAdapter
                /*adapter.filter("");
                listView.clearTextFilter();*/
                Log.i("debinf product", "search field is empty");
                menu.findItem(R.id.save_product_option).setVisible(true);

            } else {
                //adapter.filter(newText);
                //menu.findItem(R.id.save_product_option).setVisible(false);
                searchView.requestFocus();
                Log.i("debinf product", "search field is NOT empty = "+s.toString());
            }
            return true;
        }
    });
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    super.onOptionsItemSelected(item);

    if (item.getItemId() == R.id.save_product_option) {
        Toast.makeText(this, "Save Product", Toast.LENGTH_SHORT).show();
        saveProduct();
        return true;
    }
    if (item.getItemId() == R.id.import_product_option) {
        Toast.makeText(this, "Import Product", Toast.LENGTH_SHORT).show();
        return true;
    }
    if (item.getItemId() == R.id.cleanfields_product_option) {
        Toast.makeText(this, "Clean Fields", Toast.LENGTH_SHORT).show();
        return true;
    }

    return false;
}

@Override
public boolean onPrepareOptionsMenu(final Menu menu) {

    if (isSwitchChecked) {
        //invalidateOptionsMenu();//update menu options
        menu.findItem(R.id.save_product_option).setVisible(true);

    } else {
        //invalidateOptionsMenu();//update menu options
        menu.findItem(R.id.save_product_option).setVisible(false);

    }
    return super.onPrepareOptionsMenu(menu);
}

На приведенном ниже снимке экрана показано, как инициализируется действие.Но searchView не отвечает на щелчок.

settofalse

Когда я установил Switch, кнопка saveButton появляется снова, но searchView и saveButton не отвечают на нажатие.

settotrue[![][1]] 3

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

...