首页 > 解决方案 > 如何使用菜单项在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。

标签: androidcontextmenumenuitem

解决方案


我终于破解了它。我就是这样做的。

    @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 之间切换。我希望我的回答对某人有所帮助。


推荐阅读