【问题标题】:How to switch icons of action bar menu in android如何在android中切换操作栏菜单的图标
【发布时间】:2016-11-17 04:30:27
【问题描述】:

我想在点击它时切换操作栏中的图标。我在 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? 有人可以帮帮我吗?

【问题讨论】:

    标签: android menu


    【解决方案1】:

    将您的图标保持在可绘制状态并比较类似的内容

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

    你可以找到更多关于如何比较drawable的答案here

    您也可以尝试使用标志

    全局变量

    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;
    

    【讨论】:

    • 变量isStarfill没有连接到任何地方。如何初始化isStarFilled?
    • 保持在 oncreate 方法之上
    • 我已经用最新的代码编辑了我的问题。如果 (isStarFilled) 无法解析符号 isStarFilled,则会在内部显示错误
    • 保持布尔值 isStarFilled=false;在 oncreate 之上,而不是在 oncreate 方法中
    • 我按照你说的做了。它既没有显示任何错误,也没有改变图标。
    猜你喜欢
    • 2014-02-23
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多