我正在做一个项目,我需要实现一个菜单项,其中的图标需要根据用户的点击而改变。用户可以将该项目设置为收藏夹,如果它已经是收藏夹,则可以将其删除。这些变化也需要在房间数据库中进行更新。下面是我目前的代码。
@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。
我终于破解了它。我是这样做的。
@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();
if(id==R.id.action_favorite){
if (isFavorite){
mTeaDetailViewModel.setFavorite(false);
favItem.setIcon(R.drawable.ic_favorite_border);
Toast.makeText(this,
" Favourite is Removed",
Toast.LENGTH_LONG).show();
}
else {
mTeaDetailViewModel.setFavorite(true);
favItem.setIcon(R.drawable.ic_favorite_dark);
Toast.makeText(this,
" favorite set successfully",
Toast.LENGTH_LONG).show();
}
}
if (item.getItemId() == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
我注意到我需要先检查项目是否被点击,然后每当一个项目被点击时,我都会检查isFavorite状态,并相应地更新。 如果点击时项目已经是你的最爱,则该值被设置为false,反之亦然通过这样做,我能够在任何时候点击项目时在true和false之间切换。