前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android开发(36) Actionbar的图标和点击事件

Android开发(36) Actionbar的图标和点击事件

作者头像
张云飞Vir
发布2020-03-16 16:40:34
2.2K1
发布2020-03-16 16:40:34
举报
文章被收录于专栏:写代码和思考写代码和思考

需求

我写了一个activity,使用了actionbar. 在这个activity中,有fragment,默认先打开一个 homeFragment,点击某个按钮会进入 detailFragment.

当启动detailFragment 时,我希望在detailFragment 打开时,actionbar出现 返回的箭头按钮 "<" . 点击返回箭头按钮,关闭 我希望在detailFragment回到 homeFragment。

实现

显示返回按钮

代码语言:javascript
复制
@Override
    public void onStart() {
        super.onStart();
        ActionBar actionBar = getActivity().getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setIcon(
                new ColorDrawable(getResources().getColor(android.R.color.transparent))); //在这里,我把图标改成透明色了
    }

点击返回按钮关闭fragment

监听onOptionsItemSelected事件

代码语言:javascript
复制
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            getActivity().getFragmentManager().popBackStack();
            return false;
        }
        return super.onOptionsItemSelected(item);
    }

但是,点击返回按钮后,将无法工作。你会发现 onOptionsItemSelected 不会被调用。 解决方法:在 onCreate时调用 setHasOptionsMenu(true);

代码语言:javascript
复制
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
     setHasOptionsMenu(true);
}

处理homeFragment的actionbar 图标状态

由于我有了一个homeFragment, 它是主fragment,我希望在这个homeFragment被覆盖时,由覆盖他的fragment控制actionbar (比如变成有返回图标的样子), 当覆盖他的fragment关闭,homeFragment重新出现时,还要变成原先的样子(有图标,无返回按钮)。

要达到这点,这就要获得 actionbar的图标。

代码如下:

代码语言:javascript
复制
Drawable actionbar_lastHomeIcon;

@Override
    public void onStart() { //重新显示时,再设置会图标
        super.onStart();
        ActionBar actionBar = getActivity().getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(false);
        if (actionbar_lastHomeIcon != null)
            actionBar.setIcon(actionbar_lastHomeIcon);
    }

    @Override
    public void onPause() {//被覆盖时,记录下 图标
        super.onPause();
        ImageView imageView = (ImageView) getActivity().findViewById(
                android.R.id.home);
        actionbar_lastHomeIcon = imageView.getDrawable();
    }

参考:

http://stackoverflow.com/questions/23349630/actionbar-get-current-icon-findviewbyid

本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求
  • 实现
    • 显示返回按钮
    • 点击返回按钮关闭fragment
      • 处理homeFragment的actionbar 图标状态
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com