美文网首页
UI Fragment

UI Fragment

作者: 爱做梦的严重精神病患者 | 来源:发表于2018-12-08 21:16 被阅读0次

    1.创建UI Fragment

    • 定义布局
    • 创建UI Fragment的类
      1.实现Fragment的生命周期方法:
       Fragment.onCreate(Bundle)是public方法,而Activity.onCreate(Bundle)是protected方法。Fragment生命周期方法必须是public方法,因为托管Fragment的Activity要调用它们。
      类似于ActivityFragment同样具有保存及获取状态的bundle也可以根据需要使用Fragment.onSaveInstanceState(Bundle)方法。
      Fragment的视图没有在Fragment.onCreate(Bundle)方法中生成而是在onCreateView(LayoutInflater, ViewGroup, Bundle)中生成。该方法实例化Fragment视图的布局,然后将实例化的View返回给托管Activity。其中Bundle参数用来存储恢复数据
    public class CrimeFragment extends Fragment {
      private Crime mCrime;
    
      //进行一些数据的初始化工作
      @Override
      public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mCrime = new Crime();
        }
    
      //进行视图和控件的初始化工作
      @Override
      public View onCreateView(LayoutInflate inflater, ViewGroup container, Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.fragment_crime, container, false);
            return v;
        }
            
    }
    

    2.向FragmentManager添加UI Fragment

     要将Fragment托管给Activity,需要调用Activity的FragmentManagerFragmentManager类具体管理Fragment队列Fragment事务回退栈。在Activity.onCreate(Bundle)方法中获取FragmentManager,并将Fragment交给它管理。

    public class CrimeActivity extends AppCompatActivity {
         @Override
          protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_crime);  
                
                FragmentManager fm = getSupportFragmentManager();
                //从fm中获取fragment
                Fragment fragment = fm.findFragmentById(R.id.fragment_container);
    
                if(fragment == null) {
                   fragment = new CrimeFragment();
                   //创建fragment事务,添加、替换、删除fragment
                   fm.beginTransaction()
                          //将fragment添加到指定Id的视图容器中  
                         .add(R.id.fragment_container, fragment)
                         .commit(); 
              }
          }
    }
    

     R.layout.activity_crime布局如下:

    <FrameLayout xmlns:android="http"//schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
    

    3.FragmentManager与Fragment生命周期

    Fragment生命周期方法:

    onAttach(Context)->onCreate(Bundle)->onCreateView(....)
    
    ->onActivityCreated(Bundle)
    
    ->onStart()->onResume()->onPause()->onStop()->onDestroyView()
    

    Activity的FragmentManager负责调用队列中Fragment的生命周期方法。在FragmentManager中添加Fragment并开始管理时,Fragment.onAttach(Context)、onCreate(Bundle)、onCreateView(....)方法会被调用。
     由于一般都是在Activity.onCreate(Bundle)方法中添加Fragment,所以当Activity.onCreate(Bundle)执行后Fragment.onActivityCreated(Bundle)方法会被调用
    之后,在Activity处于正常的运行状态时,FragmentManager会促使Fragment调用一系列必要的生命周期方法与Activity的最新状态保持一致

    4.Fragment滥用

     应用单屏最多使用2-3个Fragment。Fragment是用来封装关键组件以便复用,也就是说将屏幕分为主要的2-3个部分,这些部分利用Fragment进行封装。对于零碎的小组件直接使用各类控件即可。

    相关文章

      网友评论

          本文标题:UI Fragment

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