如何在android系统中使用菜单项实现对收藏夹按钮的添加和删除。

问题描述 投票:0回答:1

我正在做一个项目,我需要实现一个菜单项,其中的图标需要根据用户的点击而改变。用户可以将该项目设置为收藏夹,如果它已经是收藏夹,则可以将其删除。这些变化也需要在房间数据库中进行更新。下面是我目前的代码。

        @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。

android contextmenu menuitem
1个回答
0
投票

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

    @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之间切换。

© www.soinside.com 2019 - 2024. All rights reserved.