android - 如何使用菜单项在android中实现添加和删除收藏按钮
问题描述
我正在做一个项目,我需要实现一个菜单项,其中图标需要根据用户点击进行更改。用户可以将该项目设置为收藏,如果它已经是收藏,则将其删除。这些更改也需要在房间数据库上更新。以下是我当前的代码。
@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 之间切换。我希望我的回答对某人有所帮助。
推荐阅读
- python - Python-如何处理python异常中的X显示错误
- filesystems - ext2/3/4 文件系统如何处理 64 位 time_t?
- mongodb - Mongodb:如何找到使最大/最小长度值最大化并计算平均值的嵌套组?
- spring - 尝试从数据库中获取空值时出现 JpaSystemException
- java - 什么线程正在等待 - 无法从线程转储中找到
- php - 用文件名输入做笔记不起作用html?
- javascript - axios 解析 JSON 错误(服务器响应中出现意外字符)
- javascript - 依赖于 bootstrap.js 的轮播在 vue.js 组件中不起作用
- java - 你如何在 Android 中操作多边形?
- python - 我只有一把钥匙,但需要根据评分提取对象