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

需求

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

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

实现

显示返回按钮

@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事件

@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);

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
     setHasOptionsMenu(true);
}

处理homeFragment的actionbar 图标状态

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

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

代码如下:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值