如何在android中切换动作栏菜单的图标

时间:2016-11-17 04:30:28

标签: android menu

我想在动作栏中点击它时切换图标。我在onOptionsItemSelected中执行了以下操作。

   @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){

        case R.id.star_School:
            if (isStarFilled) {
                item.setIcon(R.mipmap.starfilled);
                isStarFilled=true;
            }else{
                item.setIcon(R.mipmap.star);
                isStarFilled=false;
            }
            return true;
    }
    return super.onOptionsItemSelected(item);
}

这不适用于我的情况。这是我的菜单xml文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/star_School"
        android:icon="@mipmap/star"
        android:title="Bookmark"
        app:showAsAction="always" />
</menu>

这是我的onCreate方法

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_school_details);
        Boolean isStarFilled=false;

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle(getIntent().getExtras().getString("name"));

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);

    }

无法解析符号isStarFilled? 有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

将您的图标保持在可绘制状态并比较像这样的东西

 mRememberPwd.getDrawable().getConstantState().equals
  (getResources().getDrawable(R.drawable.login_checked).getConstantState())

您可以找到有关如何比较drawable

的更多答案here

你也可以尝试使用flag

全局变量

boolean  isStarFilled=false;


case R.id.star_School:
            if (isStarFilled) {
                item.setIcon(R.mipmap.starfilled);
             isStarFilled=false;
            }else{
            item.setIcon(R.mipmap.star);
               isStarFilled=true;
               }
            return true;