美文网首页
Activity基类详解(5) — AppActivity加载F

Activity基类详解(5) — AppActivity加载F

作者: 奔跑的佩恩 | 来源:发表于2021-04-29 15:32 被阅读0次

前言

在之前已经对AppActivity的简单使用做了详细讲述,大家感兴趣可参考
Activity基类详解(1) — 前言
Activity基类详解(2) — 架构概述
Activity基类详解(3) — AppActivity基础能力
Activity基类详解(4) — AppActivity简单使用
那么,当我们的Activity中涉及到fragment加载的问题,该如何处理呢?下面就来具体讲述。

今天涉及知识点有:

  1. AppActivity加载fragment时主要涉及到的重点
  2. Activity 和 Fragment 对于返回键处理使用说明
  3. 需要注意的问题

一. 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 中需要处理返回键逻辑的时候,则需要重写AppActivityonActivityKeyDown(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 {

}

然后在FragmentonAttach(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按正常生命周期执行。所以务必确定activityFragment的跳转是用的add()系列方法,而不是show()hide(),因为show()hide()不走Fragment生命周期,这样会导致返回键功能没反应,或者出"奇妙"的bug
  • ActivityFragment 传值可以参考上面关于返回键处理的逻辑。

ok,今天的内容就介绍到这里了,谢谢大家。

相关文章

网友评论

      本文标题:Activity基类详解(5) — AppActivity加载F

      本文链接:https://www.haomeiwen.com/subject/hdlwrltx.html