先说说我的使用场景:

我写了一个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. BUG处理流程说明

    一.        BUG处理流程图: 流程描述: 1.  测试人员发现bug提交给开发. 2.  开发人员判断是否是bug. 3.  如果是bug,进行修改,修改完成后更改bug状态为已解决. 4. ...

  2. ganglia安装 by frank

    作者是frank. 1.安装epelrpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm2. ...

  3. nginx 有关防盗链的设置

    http://blog.csdn.net/longjef/article/details/53284108 关于nginx防盗链的方法网上有很多教程,都可以用,但是我发现很多教程并不完整,所做的防盗链 ...

  4. Java 技术新手入门

    对于想学习Java的朋友 请参考IBM旗下站点:http://www.ibm.com/developerworks/cn/java/newto/index.html 我看了下对于新手有很好的指导,并且 ...

  5. Atitit gui界面ui技术发展史与未来趋势

    Atitit gui界面ui技术发展史与未来趋势 1. Gui技术的发展,从像素自绘到native控件体系,再到dsl h51 1.1. 编程语言的发展 从机器语言,汇编语言到本地native语言(c ...

  6. 【Unity】3.5 导入音频文件

    分类:Unity.C#.VS2015 创建日期:2016-04-05 一.简介 音频文件 (Audio File) 资源的选择原则应该以无故障地流畅运行为宗旨.下面列出了常用的音频文件. .AIFF ...

  7. Virtual Memory$$memory-mapped-files

    Virtual Memory http://csapp.cs.cmu.edu/2e/ch9-preview.pdf https://howtodoinjava.com/java-7/nio/java- ...

  8. oracle sql合计结果信息使用分组的小问题

    --月统计 Select SUBSTR(t.BalanceDate,1,6) as Mon, t.RechargeType , SUM(t.SumNum) as SumNum , SUM(t.SumF ...

  9. Excel2013 破解(编辑工作表受保护)密码

    在日常工作中,大家有时会遇到过这样的情况:使用Excel编制的报表.表格.程序等,在单元格中设置了公式.函数等,为了防止其他人修改您的设置或者防止您自己无意中修改,您可能会使用Excel的工作表保护功 ...

  10. java 多线程 33: 多线程组件之 Callable、Future和FutureTask

    Callable Callable和rRunnable差不多,两者都是为那些其实例可能被另一个线程执行的类而设计的,最主要的差别在于Runnable不会返回线程运算结果,Callable可以(假如线程 ...