一,Fragment的创建:
1,创建Fragment的XML布局,创建NewsTitleFragment extends Fragment,重写onCreateView()
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.i(TAG,"onCreateView()");
View view=inflater.inflate(R.layout.fragment_news_title, container, false);
return view;
}
2,Fragment的生命周期方法:
onAttach(Context context)
onCreate(Bundle savedInstanceState)
onCreateView()
onActivityCreated()
onStart()
onResume()
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
其与关联Activity生命周期的关系:(在XML中静态引入Fragment的情况)
I/MainActivity: onCreate()
I/NewsTitleFragment: onAttach()
I/NewsTitleFragment: onCreate()
I/NewsTitleFragment: onCreateView()
I/MainActivity: onStart()
I/NewsTitleFragment: onActivityCreated()
I/NewsTitleFragment: onStart()
I/MainActivity: onResume()
I/NewsTitleFragment: onResume()
I/MainActivity: onPause()
I/NewsTitleFragment: onPause()
I/MainActivity: onStop()
I/NewsTitleFragment: onStop()
PS.一般我们说一个Activity或其关联的Fragment要运行到onResume()后才能看见,经调试确认是在onResume()执行完后处于运行状态是可见。
二,Fragment的使用:
1,XML中静态引用,通过name属性
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.example.archermind.fragment.NewsTitleFragment"/>
2,code中动态添加:
NewsContentFragment fragment=new NewsContentFragment();
FragmentManager fragmentManager=getFragmentManager();
FragmentTransaction transaction=fragmentManager.beginTransaction();
transaction.replace(R.id.news_content_fg,fragment);
transaction.commit();
注意:transaction.replace()会替换之前的fragment,如果存在的话,之前的fragment会执行onPause()->onStop()->onDestroy()被销毁。
可以在transaction.commit()之前调用transaction.addToBackTask(null)让其处于提示状态,之后按Back建会再次显示。
三,Fragment与Activity相互通信
1,Activity操作Fragment:
NewsContentFragment fragment=(NewsContentFragment)getFragmentManager().findFragmentById(R.id.news_content_fg);
2,Fragment操作Activity:
getActivity().findViewById(R.id.news_content_layout)!=null)
注:在Fragment中调用getActivity()可以得到与之关联的Activity实例。通知这也是获得Context对象的方式。
另:findViewById()这个方法不仅仅是View含有,Activity中也含有
@Nullable
public View findViewById(@IdRes int id) {
return getWindow().findViewById(id);
}
3,Fragment最初是为平板适配而来的,适配方式可以在不同layout文件夹下面创建同名的XML,XML中做各自不同的布局,程序运行时会
根据自身设备的情况去选择加载不同layout下的xml。