第四章问题集中
来源:4-10 主界面底部导航栏封装-5

慕用0425495
2020-08-18
-
在common包下的Activity extends AppCompatActivity:
onCreate方法中做了if (initArgs(getIntent().getExtras()))条件判断, 我不明白做此条件判断意义在哪, getIntent().getExtras( )返回类型为Bundle, 那么Bundle存在的意义是什么? 存储了什么信息 ? -
同在Activity类, 有复写的onSupportNavigateUp() & onBackPressed()两个方法, 哪个方法对应按下导航栏下面左侧的三角返回标识的回调?
-
另外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
getIntent().getExtras( ) 是当前界面启动的Intent信息中携带的参数,是由发起界面传递过来的一些需要当前界面处理的参数,而当前界面的处理将其集中在initArgs中,这里的if判断的作用也在这里,如果A页面想要显示B页面,A传递一些数据给B,B页面在initArgs中进行接收并处理,如果参数不合法,则直接返回false,由基础类直接关闭当前Activity。
onSupportNavigateUp() & onBackPressed()这个....哎,onBackPressed接收系统的返回操作,实体按键或虚拟三角,onSupportNavigateUp接收Toolbar的返回行为
这里的意思是,拿到自己当前页面的Fragment,并触发当前页面对应的Fragment列表的返回事件,等于是透传Activity的返回事件到Fragment中,如果Fragment返回true,就代表事件被Fragment消费了,Fragment有自己的处理方式了,所以我们就直接return,不进行后续事件派发了,也不进行对应的后续逻辑处理了,至于界面是关闭还是其他行为就由Fragment来决定了,这是属于事件派发的行为抽象与封装。算是比较典型的事件传递例子。
00
相似问题
回答 2
回答 2