前言
在之前已经对AppActivity
的简单使用做了详细讲述,大家感兴趣可参考
Activity基类详解(1) — 前言
Activity基类详解(2) — 架构概述
Activity基类详解(3) — AppActivity基础能力
Activity基类详解(4) — AppActivity简单使用
那么,当我们的Activity
中涉及到fragment
加载的问题,该如何处理呢?下面就来具体讲述。
今天涉及知识点有:
- AppActivity加载fragment时主要涉及到的重点
- Activity 和 Fragment 对于返回键处理使用说明
- 需要注意的问题
一. AppActivity加载fragment时主要涉及到的重点
AppActivity
加载fragment
时,主要涉及两个问题:
- activity 和 fragment 交互传值
- activity 和 fragment 对于返回键处理
这里我重点讲返回键处理
的使用,因为传值
的逻辑已经包含在返回键处理
逻辑中。
二. Activity 和 Fragment 对于返回键处理使用说明
Activty
中加载有动态的Fragment
,对于该activity
依然需要继承AppActivity
,示例如下:
public class MainActivity extends AppActivity{
}
当 MainActivity
不需要处理返回键的时候,它无需重写onActivityKeyDown(int keyCode, KeyEvent event)
方法。此时MainActivity
点击返回键会执行系统对于返回键响应的方法。 当 MainActivity
中需要处理返回键逻辑的时候,则需要重写AppActivity
的onActivityKeyDown(int keyCode, KeyEvent event)
方法,并且将返回值设置为true,类似如下:
public class MainActivity extends AppFragActivity{
//其他代码省略
//......
@Override
protected boolean onActivityKeyDown(int keyCode, KeyEvent event) {
//此处写MianActivity的返回键处理逻辑
//......
//最后返回true,用于拦截系统返回键功能
return true;
}
}
Fragment
中处理返回键逻辑的话,Fragment
需要实现OnFragmentBackListener
接口,如下:
public class FragmentB extends Fragment implements OnFragmentBackListener {
}
然后在Fragment
的onAttach(Context context)
中给Context
赋值,在onCreateView
中设置监听,在onDestroyView()
中解除监听,并在onBackForward(int keyCode, KeyEvent event)
方法中对Fragment
界面返回键做处理,类似如下:
//Fragment实现OnFragmentBackListener接口
public class FragmentB extends Fragment implements OnFragmentBackListener {
//声明Context
private Context mContext;
@Override
public void onAttach(Context context) {
super.onAttach(context);
//给context赋值
this.mContext = context;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mLayoutView = inflater.inflate(R.layout.fragment_b, container, false);
initView();
initData();
setListener();
return mLayoutView;
}
private void initView() {
}
private void initData() {
}
private void setListener() {
//监听返回键
if (mContext instanceof MainActivity) {
((MainActivity) mContext).setOnFragmentBackListener(this);
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
//解除返回键监听
if (mContext instanceof MainActivity) {
((MainActivity) mContext).setOnFragmentBackListener(null);
}
}
@Override
public void onBackForward(int keyCode, KeyEvent event) {
//fragment中返回键处理逻辑
//......
}
}
三. 需要注意的问题
-
AppActivity
加载frgment
的设计初衷是fragment
按正常生命周期执行。所以务必确定activity
到Fragment
的跳转是用的add()
系列方法,而不是show()
和hide()
,因为show()
和hide()
不走Fragment
生命周期,这样会导致返回键功能没反应,或者出"奇妙"的bug
-
Activity
向Fragment
传值可以参考上面关于返回键处理的逻辑。
ok,今天的内容就介绍到这里了,谢谢大家。
网友评论