第四章问题集中

来源:4-10 主界面底部导航栏封装-5

慕用0425495

2020-08-18

  1. 在common包下的Activity extends AppCompatActivity:
    onCreate方法中做了if (initArgs(getIntent().getExtras()))条件判断, 我不明白做此条件判断意义在哪, getIntent().getExtras( )返回类型为Bundle, 那么Bundle存在的意义是什么? 存储了什么信息 ?

  2. 同在Activity类, 有复写的onSupportNavigateUp() & onBackPressed()两个方法, 哪个方法对应按下导航栏下面左侧的三角返回标识的回调?

  3. 另外onBackPressed()里面的逻辑:
    @Override
    public void onBackPressed() {
    @SuppressLint(“RestrictedApi”)
    List<android.support.v4.app.Fragment> fragments = getSupportFragmentManager().getFragments();
    // 判断是否为空
    if (fragments != null && fragments.size() > 0) {
    for (Fragment fragment : fragments) {
    // 判断是否为我们能够处理的Fragment类型
    if (fragment instanceof net.qiujuer.italker.common.app.Fragment) {
    // 判断是否拦截了返回按钮
    if (((net.qiujuer.italker.common.app.Fragment) fragment).onBackPressed()) {
    // 如果有直接Return
    return;
    }
    }
    }
    }

    super.onBackPressed();
    finish();
    }

内部判断Fragment.onBackPressed, 并且true的情况下return, 是什么意思?
写回答

1回答

Qiujuer

2020-08-19

  1.  getIntent().getExtras( ) 是当前界面启动的Intent信息中携带的参数,是由发起界面传递过来的一些需要当前界面处理的参数,而当前界面的处理将其集中在initArgs中,这里的if判断的作用也在这里,如果A页面想要显示B页面,A传递一些数据给B,B页面在initArgs中进行接收并处理,如果参数不合法,则直接返回false,由基础类直接关闭当前Activity。

  2. onSupportNavigateUp() & onBackPressed()这个....哎,onBackPressed接收系统的返回操作,实体按键或虚拟三角,onSupportNavigateUp接收Toolbar的返回行为

  3. 这里的意思是,拿到自己当前页面的Fragment,并触发当前页面对应的Fragment列表的返回事件,等于是透传Activity的返回事件到Fragment中,如果Fragment返回true,就代表事件被Fragment消费了,Fragment有自己的处理方式了,所以我们就直接return,不进行后续事件派发了,也不进行对应的后续逻辑处理了,至于界面是关闭还是其他行为就由Fragment来决定了,这是属于事件派发的行为抽象与封装。算是比较典型的事件传递例子。

0
0

手把手开发完整的即时通讯App 客户端+服务端+MVP架构

客户端+服务端+MVP架构+封装思想+主流框架

1755 学习 · 874 问题

查看课程