Я пытаюсь скрыть / показать всегда видимый элемент (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 не отвечает на щелчок.
Когда я установил Switch
, кнопка saveButton появляется снова, но searchView и saveButton не отвечают на нажатие.
] 3
Заранее спасибо!