这里说一下关于fragment的一些压栈和出栈的知识
fragment在我们的工作是经常用到的,简单说它就是比activity更加小巧而且灵活的一个UI组件而且具备和activity差不多的一些声明周期方法。既能在xml布局中直接引入重用,也能在我们的代码中动态的添加。fragment必须是依付activity而存在的,activity的生命周期会影响到fragment的生命周期。
- 生命周期
onAttach
当Fragment和Activity发生关联是调用
onCreateView
创建视图
onActivityCreated
activity的oncreate调完后,调用。
onDestoryView
和OnCreate相应 Fragment视图移除后调用
onDetach
和onAttach对于 取消关联是调用
除了OnCreateView以外,其他方法重新都要调用super
- 静态使用方法
---xml
<fragment
android:id="@+id/fragment"
android:name="AddFragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
---代码
public class OneFragment extends android.app.Fragment {
@Override
public void onAttach(Context context) {
super.onAttach(context);
Log.i("jinwei", "onAttach");
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
Log.i("jinwei", "onAttach activity");
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("jinwei", "onCreate");
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Log.i("jinwei", "onCreateView");
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.i("jinwei", "onActivityCreated");
}
@Override
public void onStart() {
super.onStart();
Log.i("jinwei", "onStart");
}
@Override
public void onResume() {
super.onResume();
Log.i("jinwei", "onResume");
}
@Override
public void onPause() {
super.onPause();
Log.i("jinwei", "onPause");
}
@Override
public void onStop() {
super.onStop();
Log.i("jinwei", "onStop");
}
@Override
public void onDetach() {
super.onDetach();
Log.i("jinwei", "onDetach");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i("jinwei", "onDestroy");
}
@Override
public void onDestroyView() {
super.onDestroyView();
Log.i("jinwei", "onDestroyView");
}
}
2.动态使用
---xml
<Fragment
android:id="@+id/frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
---代码片段
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.fragment, mOneFragment);
transaction.commit();
-
事物介绍
如果需要动态使用fragment就需要用到getFragmentManager().beginTransaction()这个事物类。
每次进行了操作都要获取一次事物,然后在进行提交操作。
FragmentTransaction transaction = getFragmentManager().beginTransaction()
transaction.commit();add(id,fragment)
添加一个fragmentreaple(id,fragment)
替换一个事物remove(fragment)
移除attach(fragment)
附加一个fragmentdetach(fragment)
移除一个fragmentaddToBackStack("")
对事物进行加入栈处理如果add后。当退出会按顺序退出fragment。commitAllowingStateLoss();
和commit()一样。不同的是commit下onSaveInstanceSate后调用commit会carsh,
而这个方法会进行检查这种操作不会奔溃,但是onSaveInstanceSate就不会进行存储操作了。executePendingTransactions
commit()后调用,来保证立即执行,变异步为同步。commitNow()
将只会执行你当前要提交的transaction. 所以commitNow()避免你会不小心执行了那些你可能并不想执行的transactions.
网友评论