1、添加Fragment的方式有两种,一种是定义在XML文件中,一种是动态添加(需要xml中定义一个空的FrameLayout来作为容器)
动态添加
创建想要添加的Fragment
HeadlinesFragment firstFragment = new HeadlinesFragment();
如果希望传递参数可以这样设置
firstFragment.setArguments(getIntent().getExtras());
获取SupportFragmentManager、开始事务beginTransaction、进行的是添加操作add、提交commit
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container,firstFragment).commit();
这里需要注意一点就是当前Activity需要继承FragmentActivity或者ActionBarActivity等支持Fragment。
获取定义在Xml中的Fragment
ArticleFragment articleFrag = (ArticleFragment)
getSupportFragmentManager().findFragmentById(R.id.article_fragment);
定义在xml文件中的Fragment不可动态移除掉
2、进行替换Fragment操作
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, newFragment);
如果想回到替换前的Fragment,添加返回导航
transaction.addToBackStack(null);
transaction.commit();
3、Fragment to Activity communication
在Fragment中定义一个接口,需要在Activity中实现该接口,在onAttach(Activity activity)方法中判断Activity是否已实现了接口。
Define an Interface
// Container Activity must implement this interface
public interface OnHeadlineSelectedListener {
public void onArticleSelected(int position);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}
通过在Fragment中调用接口中的方法,即可与Activity communication。
4、All Fragment-to-Fragment communication is done through the associated Activity. Two Fragments should never communicate directly.
5、Deliver a Message to a Fragment
在Activity中获取Fragment的实例,判断是否非空,调用Fragment中的公共函数,通过参数传递Message。