Я работаю над проектом, в котором мне необходимо реализовать пункт меню, в котором значок должен меняться в зависимости от щелчка пользователя. Пользователи могут установить элемент в качестве избранного или удалить его, если он уже является избранным. Эти изменения также необходимо обновить в базе данных комнат. Ниже мой текущий код.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
this.myMenu = menu;
getMenuInflater().inflate(R.menu.menu_favorite, myMenu);
favItem = myMenu.findItem(R.id.action_favorite);
//set different icon when isFavorite is true.
if (isFavorite){
favItem.setIcon(R.drawable.ic_favorite_dark);
Log.d(TAG, "onCreateOptionsMenu: favoriteItemIcon is checked");
}
// menu.getItem(R.id.action_favorite);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (item.getItemId()){
case R.id.action_favorite:
updateFavoriteStatus();
break;
case android.R.id.home:
finish();
break;
}
return super.onOptionsItemSelected(item);
}
public void updateFavoriteStatus(){
if (isFavorite){
Toast.makeText(this,
" "your favorite is set ",
Toast.LENGTH_LONG).show();
}
else{
mTeaDetailViewModel.setFavorite(false);
Toast.makeText(this,
" Favourite is Removed",
Toast.LENGTH_LONG).show();
favItem.setIcon(R.drawable.ic_favorite_border);
}
}
Вот мой класс Дао
@WorkerThread
@Query("UPDATE my_table SET favorite =:favValue WHERE name = :name")
void updateFavorite(String name, boolean favValue);
Я хочу, чтобы при каждом щелчке по пункту меню значение для строки isFavorite обновлялось до значения true или false. В настоящее время работает то, что я могу обновить строку isFavorite только один раз, для которой установлено значение true. Я не могу сбросить его на false, когда я нажимаю на пункт меню во второй раз.