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