Fragment
Fragment仅仅是用来对Activity的补充,实现一些Activity的复杂界面和逻辑切换。界面和生命周期都依赖于Activity。在Activity运行时,可以独立操作各个Fragment,Fragment可以接收输入或者各种布局,有点像是子Activity。
补充:support.v4中的Fragment可能当时还不是太完善,必须要在FragmentActivity中才能使用。
Fragment生命周期
几个已经做过扩展的Fragment:
DialogFragment
ListFragment
PreferenceFragment
Fragment操作
添加
在onCreateView()中返回布局,如:
public static class ExampleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.example_fragment, container, false);
}
}
或者通过代码将Fragment添加到一个ViewGroup
FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
使用add(Fragment, String)方法来添加后台的Fragment,可以通过getFragmentByTag()来获取。
替换
// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
注:addToBackStack(),将Fragment添加到Fragment返回栈,以便back键返回。
管理Fragment
在Activity中,Activity通过FragmentManager来处理Fragment的逻辑。
findFragmentById()
findFragmentByTag()
popBackState()
可以打开一个FragmentTransaction来完成添加或者替换等操作。
FragmentTransaction操作都需要commit(),可以通过设置 setTransition()方法来设置过渡动画。
Fragment于Activity通信
通信可以通过getActivity()来得到Activity实例,通过回调函数来进行传递一些消息、事件之类。在Fragment中定义一些Interface,让Activity来实现它。
通过实现onCreateOptionsMenu()向Activity的Option中添加一些action,不过需要在onCreate()的时候设置setHasOptionsMenu(),还可以得到onOptionsItemSelected()回调。