关于Fragment的一些使用心得-跳转和返回栈实战浅析

节选自:关于Fragment的一些使用心得-跳转和返回栈实战浅析


先说fragment之间的跳转吧!

我的项目中首先是一个activity,在该活动中添加了一个fragmentA,然后需要从fragmentA跳转到fragmentB,那么我的实现方法如下:

// 设置标题右侧文字及单击事件监听
activity.setTitleRight("添加", new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        AddPlanFragment fragment = new AddPlanFragment();// 创建AddPlanFragment对象
        showFragment(PlanListFragment.this, fragment);// 跳转添加计划界面
    }
});
/**
 * 碎片之间的跳转
 *
 * @param fragment_current 当前fragment
 * @param fragment_next    跳转后显示的fragment
 */
private void showFragment(Fragment fragment_current, Fragment fragment_next) {
    // 获取FragmentTransaction对象
    FragmentTransaction transaction = ((WorkPlanActivity) context)
            .getSupportFragmentManager().beginTransaction();
    if (fragment_next.isAdded()) {
        // 如果fragment_next已经添加过了,那么直接隐藏fragment_current,显示fragment_next
        transaction
                .hide(fragment_current)
                .show(fragment_next)
                .addToBackStack(null)// 加入返回栈,点击回退键会返回上一个fragment
                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)// 设置转换动画
                .commitAllowingStateLoss();// 提交事务
    } else {
        // 如果fragment_next还没有添加,那么用add方法添加该碎片
        transaction
                .hide(fragment_current)// 隐藏fragment_current
                .add(R.id.frameLayout_workPlan, fragment_next)
                .addToBackStack(null)
                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                .commitAllowingStateLoss();
    }
}

上面的代码简单来说就是fragmentA中顶部右侧的标题添加单击事件监听,用以跳转到fragmentB。方法中我加了关键的注释,大家应该能理解。

  • 虽说这是一个实现方法,但是难免嵌套多层fragment的时候会出现重影问题(有小概率会出现),我这里有几个比较好的链接给大家去参考参考,然后建议不要嵌套多层:

9行代码让你App内的Fragment对重叠说再见

Fragment全解析系列(二):正确的使用姿势


下面就来说说返回栈吧! 继续阅读关于Fragment的一些使用心得-跳转和返回栈实战浅析

这是一份面向Android开发者的复习指南

节选自:这是一份面向Android开发者的复习指南


前言

相信很多同学都会有这样的感受,前三天刚刚复习的知识点,今天问的时候怎么就讲不出个所以然了呢?

本文的目的就是致力于帮助大家尽可能的建立Android知识体系,希望大家会喜欢~

考虑到上传完的脑图都被压缩过,高清脑图下载地址:

链接:https://pan.baidu.com/s/1bUQccZiuLv8EVKImMDziZQ
密码:wyc8

必读

知识结构

覆盖的知识点有Android、Java、Kotlin、Jvm、网络和设计模式。

面向人群

正在求职的中高级Android开发

食用指南

和大部分人一样,我在复习完第一遍Android知识的情况下,看到相关的知识回答的仍然不能够令自己满意。

在第二遍系统复习的时候,我着重记住每个知识点的关键字,根据这些关键字拼凑出大概的知识点,最后看到每个知识点的时候,就知道大概会问哪些内容,达到这种境界以后,你就可以从容的面对每次面试了。

简单的做法就是为每个知识点建立脑图,尽可能把自己想到的关键点罗列出来,也就是下面每个章节前面的脑图。

除此以外,我还为大家提供了可能会问到的面试题。

浅析onWindowsFocusChanged()方法

节选自:浅析onWindowsFocusChanged()方法


概述

从字面上来讲,onWindowsFocusChanged()方法是指当窗口焦点变化的时候;从意义来说,onWindowsFocusChanged()就是指当前的Activity的Windows(窗口)获取或者失去焦点时这个方法就会被调用,并且当回调这个方法时,Activity是完全可见的。

在Activity生命周期中,onStart(), onResume(), onCreate()都不是布局visible的时间点,真正的visible时间点是onWindowFocusChanged()函数被执行时。从onWindowFocusChanged()被执行起,用户可以与应用进行交互了,换句话说,如果你想要在Activity加载后做些操作,可以在这个方法里调用而这之前,对用户的操作需要做一点限制。

onWindowFocusChanged()的使用情景与作用

根据介绍可以了解,onWindowFocusChanged()使用于以下等情景:

  1. 首次进入一个Activity后会在onResume()方法后面调用;
  2. 从Activity 跳到另一个Activity,新的窗口会获取焦点, 旧的Activity的窗口会失去焦点;
  3. 应用进入后台,窗口失去焦点;
  4. 应用从后台返回当前, 窗口重新获取焦点;

因此其可以有如下作用:

  1. 监控一个Activity是否载完毕;
  2. 在Activity加载后进行一些操作,如获取手机屏幕的高度和宽度;
  3. 当Activity挂起或恢复时,可以在方法内进行一些数据的保存或恢复的操作;