1.创建UI Fragment
- 定义布局
- 创建UI Fragment的类
1.实现Fragment的生命周期方法:
Fragment.onCreate(Bundle)是public方法,而Activity.onCreate(Bundle)是protected方法。Fragment生命周期方法必须是public方法,因为托管Fragment的Activity要调用它们。
类似于Activity,Fragment同样具有保存及获取状态的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的FragmentManager。FragmentManager类具体管理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进行封装。对于零碎的小组件,直接使用各类控件即可。
网友评论