博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android开发(35) fragment和actionbar组合使用。解决不触发onOptionsItemSelected的问题,获得actionbar 的默认 get icon...
阅读量:6632 次
发布时间:2019-06-25

本文共 2014 字,大约阅读时间需要 6 分钟。

先说说我的使用场景:

我写了一个activity,使用了actionbar.

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

当启动detailFragment 时,问题出现了:

 

我希望在detailFragment 打开时,actionbar出现 返回的箭头  "<" .

于是我在onStart中写下:

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

 

actionbar上有了返回按钮,我希望在点击该按钮关闭 自己这个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的图标,get 它的 Icon。

代码如下:

 

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

转载于:https://www.cnblogs.com/vir56k/p/3956459.html

你可能感兴趣的文章
美国之行第五天(r12笔记第5天)
查看>>
SAP LSMW Batch Input不能支持MEK1事务代码!
查看>>
C# 通过HttpWebRequest在后台对WebService进行调用
查看>>
南宋词人之蒋捷
查看>>
梁春晓:互联网时代的社会创新与新公益形态
查看>>
在工作中感受电子政务建设的发展
查看>>
AKM项目亮点之Arbitration Committee
查看>>
【PAT L2-001】最短路计数
查看>>
HashTable和HashMap的区别
查看>>
Kafka原理
查看>>
RPC 的概念模型与实现解析(转)
查看>>
【百度地图API】——国内首款团购网站的地图插件
查看>>
先知创新大会 | 现场众测,守护者的“竞技场”
查看>>
诗词—《吾念谁悲》
查看>>
Android官方命令深入分析之AVD Manager
查看>>
野生程序员是指仅凭对计算机开发的兴趣进入这个行业,从前端到后台一手包揽,但各方面能力都不精通的人(转)...
查看>>
VirtualBox如何扩展虚拟机Ubuntu的硬盘容量?
查看>>
vscode关闭后未打开上次界面的解决办法
查看>>
【Windows10&nbsp;IoT开发系列】PowerShell的相关配置
查看>>
全面屏成行业标配,vivo副总透露将推完成度更高产品
查看>>