美文网首页
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