美文网首页
Fragment学习

Fragment学习

作者: leoryzhu | 来源:发表于2019-03-28 14:25 被阅读0次

1、Fragment回退栈管理

Activity是由任务栈管理的,遵循先进后出的原则,Fragment也可以实现类似的栈管理,从而实现多个Fragment先后添加后可以返回上一个Fragment,当activity容器内没有Fragment时回退则退出Activity。
具体方法:FragmentTransaction.addToBackStack(String) // 通常传入null即可
代码如下:

Fragment f = new Fragment();  
FragmentManager fm = getSupportFragmentManager();  
FragmentTransaction ftx = fm.beginTransaction();  
ftx.replace(R.id.fragment_container, f, "tag");  
ftx.addToBackStack(null);  
ftx.commit();

注:
1.activity的第一个Fragment(根Fragment)可以不添加回退栈,这样最后一个Fragment按返回时就不会空白而是直接退出activity。
2.调用addToBackStack(null)将当前的事务添加到了回退栈,调用replace方法后Fragment实例不会被销毁,但是视图层次会被销毁,即会调用onDestoryView和onCreateView。若需保存当前fragment视图状态,则可以使用hide后add新的Fragment

2、Fragment与Activity通信

通用方式:

Activity调用Fragment方法:如果Activity中包含自己管理的Fragment的引用,可以通过引用直接访问所有的Fragment的public方法
Fragment调用Activity方法:在Fragment中可以通过getActivity得到当前绑定的Activity的实例,然后进行操作

推荐方式:

1.接口(Fragment返回数据给Activity)
Fragment部分代码:

public class TestFragment extends Fragment {

    private OnSaveListener listener;

    public void setListener(OnSaveListener listener) {
        this.listener = listener;
    }

    public interface OnSaveListener {
        void onSaveFinished(boolean result);

        void onSaveStart();
    }


    @OnClick(R.id.btn_save)
    public void save() {
        ....
        listener.onSaveFinished(true);
    }
}

Activity部分代码:

TestFragment f = new TestFragment();
f.setListener(new ShowCheckFragment.OnSaveListener() {

    @Override
    public void onSaveFinished(boolean result) {
        ......
    }

    @Override
    public void onSaveStart() {
        ......
    }
});

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, f);
fragmentTransaction.commit();

2.Fragment Arguments(传递数据到Fragment中)
Fragment部分代码:

ublic class TestFragment extends Fragment  
{  

    private String mArgument;  
    public static final String ARGUMENT = "argument";  

    @Override  
    public void onCreate(Bundle savedInstanceState)  
    {  
        super.onCreate(savedInstanceState);   
        Bundle bundle = getArguments();  
        if (bundle != null)  
            mArgument = bundle.getString(ARGUMENT);  

    }  

    /** 
     * 传入需要的参数,设置给arguments 
     * @param argument 
     * @return 
     */  
    public static TestFragment newInstance(String argument)  
    {  
        Bundle bundle = new Bundle();  
        bundle.putString(ARGUMENT, argument);  
        TestFragment f = new TestFragment();  
        f.setArguments(bundle);  
        return f;  
    }

3、Fragment重叠问题

当屏幕旋转或者内存重启(Fragment以及容器activity被系统回收后再打开时重新初始化)会导致Fragment重叠问题,是因为activity本身重启的时候会恢复Fragment,然后创建Fragment的代码又会新建一个Fragment的原因。
解决方法:在onCreate方法中判断参数Bundle savedInstanceState,为空时初始化Fragment实例,然后在Fragment中通过onSaveInstanceState的方法恢复数据
Activity代码:


private TestFragment f;

protected void onCreate(Bundle savedInstanceState)  
    {  
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.activity_main);  

        Log.e(TAG, savedInstanceState+"");  

        if(savedInstanceState == null)  
        {  
            f = new TestFragment();  
            FragmentManager fm = getSupportFragmentManager();  
            FragmentTransaction tx = fm.beginTransaction();  
            tx.add(R.id.id_content, f, "ONE");  
            tx.commit();  
        }  



    }  

相关文章

  • Fragment(四)——Fragment动态使用

    前言 在学习完Fragment的静态使用和Fragment常用API后,这节我们就来学习下Fragment的动态加...

  • Fragment学习笔记(基础篇)

    Fragment学习笔记 一、Fragment的定义 Fragment是在Android 3.0才开始引入的,它能...

  • Fragment的简单使用及相互之间数据的传递

    1.1.简述Fragment Fragment是Android最基本,最重要的基础概念之一。学习Fragment首...

  • Fragment使用总结

    title: Fragment使用总结tags: 学习笔记,Android,Fragment 原文:Fragme...

  • Fragment学习

    碎片是一种可以嵌入在活动中的UI片段,能让程序更加合理和充分地利用大屏幕的空间,因此在平板中应用的很广泛.碎片(f...

  • Fragment学习

    Fragment是什么 一种可以切入在活动当中的UI片段,让程序更加合理和充分的利用大屏幕的空间 静态添加Frag...

  • Fragment学习

    1、Fragment回退栈管理 Activity是由任务栈管理的,遵循先进后出的原则,Fragment也可以实现类...

  • Fragment学习

    流程:fragment->FragmentManagerImpl->FragmentController->Fra...

  • Fragment学习

    Fragment简介 Fragment(翻译为片段)可以作为Activity 布局的一部分,必须依托于Activi...

  • Fragment学习总结

    Fragment学习总结 Fragment:碎片。可以看成Activity的一个控件,必须依赖于Activity才...

网友评论

      本文标题:Fragment学习

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