先说说我的使用场景:

我写了一个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

android开发(35) fragment和actionbar组合使用。解决不触发onOptionsItemSelected的问题,获得actionbar 的默认 get icon的更多相关文章

  1. android开发中fragment获取context

    在用到fragment时无法使用.this来指定当前context内容,android开发中fragment获取context,可以使用getActivity().getApplicationCont ...

  2. Android开发:碎片Fragment完全解析fragment_main.xml/activity_main.xml

    Android开发:碎片Fragment完全解析   为了让界面可以在平板上更好地展示,Android在3.0版本引入了Fragment(碎片)功能,它非常类似于Activity,可以像 Activi ...

  3. Android开发华为手机无法看log日志解决方法

    Android开发华为手机无法看log日志解决方法 上班的时候,由于开发工具由Eclipse改成Android Studio后,原本的华为手机突然无法查看崩溃日志了,大家都知道,若是无法查看日志要它毛 ...

  4. Android开发环境搭建时遇到问题的解决方法

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/linux_loajie/article/details/33823637 Android开发环境搭建 ...

  5. Android开发 |常见的内存泄漏问题及解决办法

    在Android开发中,内存泄漏是比较常见的问题,有过一些Android编程经历的童鞋应该都遇到过,但为什么会出现内存泄漏呢?内存泄漏又有什么影响呢? 在Android程序开发中,当一个对象已经不需要 ...

  6. Android开发中Eclispe相关问题及相应解决(持续更新)

    1.Eclipse项目中的Android Private Libraries没有自动生成. 一般而言,在Android开发中,项目中引用到的jar包会放到项目目录中的libs中,引入库会放到Andro ...

  7. Android 开发 之 Fragment 详解

    本文转载于 : http://blog.csdn.net/shulianghan/article/details/38064191 本博客代码地址 : -- 单一 Fragment 示例 : http ...

  8. Android开发学习—— Fragment

    #Fragment* 用途:在一个Activity里切换界面,切换界面时只切换Fragment里面的内容* 生命周期方法跟Activity一致,可以理解把其为就是一个Activity* 定义布局文件作 ...

  9. Android开发:碎片Fragment完全解析fragment_main.xml/activity_main.xml(转)

    注明:这个转的,见谅未能标明原始出处 我们都知道,Android上的界面展示都是通过Activity实现的,Activity实在是太常用了,我相信大家都已经非常熟悉了,这里就不再赘述. 但是Activ ...

随机推荐

  1. 让MySQL在美国标准下运行

    [美国标准下运行的MySQL会有哪方面的调整] 我不得不说,这里有点标题党了:事实上我想说的就是--ansi模式下启动mysqld进行,但是这个ansi我没有找到更好的译文,就给译成了“美国标准”了. ...

  2. 自动化无线网破解工具wifite2

    自动化无线网破解工具wifite2 wifite是一款自动化wifi密码破解工具,特点是支持多个wep.wpa加密的wifi网络,不支持windows和osx. wifite的特点是可以同时攻击多个采 ...

  3. haproxy 同一域名下分发请求

    http://www.th7.cn/Program/java/201608/936162.shtml https://my.oschina.net/lockupme/blog/733375 还有一点要 ...

  4. Traefik Kubernetes 初试

    traefik 是一个前端负载均衡器,对于微服务架构尤其是 kubernetes 等编排工具具有良好的支持:同 nginx 等相比,traefik 能够自动感知后端容器变化,从而实现自动服务发现:今天 ...

  5. Go1.5正式版程序性能分析小积累,实验环境windows64

    方法一: 内存分配器跟踪:GODEBUG=allocfreetrace=1 调度器追踪 调度器追踪能够提供对 goroutine 调度的动态行为的内视,而且同意调试负载平衡和可扩展性问题.要启用调度器 ...

  6. 50x页面放到本地单独目录下,进行显示

    error_page 500 502 503 504 /50x.html; location = /50x.html { root /data0/www/html; }

  7. Chunk

    Chunk是一系列语句,Lua执行的每一块语句,比如一个文件或者交互模式下的每一行都是一个Chunk. 每个语句结尾的分号(;)是可选的,但如果同一行有多个语句最好用:分开 a = 1   b = a ...

  8. Function.apply()在提升程序性能方面的技巧

    我们先从Math.max()函数说起,Math.max后面可以接任意个参数,最后返回所有参数中的最大值. 比如 alert(Math.max(5,8))   //8alert(Math.max(5,7 ...

  9. [AWS vs Azure] 云计算里AWS和Azure的探究(3)

    云计算里AWS和Azure的探究(3) ——Amazon EC2 和 Windows Azure Virtual Machine 今天我来比较一下AWS EC2和Azure VM的具体流程上的异同.以 ...

  10. Lua语法基础(1)---简介、基本数据类型、表达式

    我觉得我已经陷入了一个坑内.因为,安装了Lua和SublimeText3编辑器之后,怎么使自己编写的lua代码在untiy内运行起来,是个我完全不了解的机制.先放一放吧.首先,来回顾一下Lua的语法基 ...