一、Fragment跳转基础
Fragment依附于它的activity,fragment之间的跳转也依赖于activity。在跳转时候主要的思路是:A_fragment发送信号-->信号传送到activity-->activity实现fragment切换-->切换到B_fragment。在这里你可能想到两种方式实现,一个是用发送intent广播,activity接收到该广播然后实现跳转(这里activity可以直接跳转,或者模拟用户点击操作跳转,performClick()之类的,如果UI界面有另外一个frament按钮的话);两另外一个是用回调的方式来实现。用广播的形式跳转这里就不详细说了,接下来是用回调的方式跳转。
二、Fragment之间跳转实现
1、定义一个interface
public interface OnHeadlineSelectedListener {
public void onArticleSelected(int position);
}
这个接口需要activity继承并实现具体的实现类。在fragment里则当一个方法来调用。
2、在onAttach里把对应的interface依附于activity
public class HeadlinesFragment extends ListFragment {
OnHeadlineSelectedListener mCallback;
// 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");
}
}
...
}
至于为什么要onAttach里这样做呢?这个可以看fragment的生命周期,onAttach是当fragment被加入到activity时调用,在这里可以获取到所在的activity。
3.在fragment里调用接口
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// Send the event to the host activity
mCallback.onArticleSelected(position);
}
在ListFragment里面有个点击事件onListIttemClick回调。在这里调用接口发送切换信号。在你的项目里,你就在需要的地方调用来发送信号切换fragment。
4.在activity里继承接口并实现方法
public static class MainActivity extends Activity
implements HeadlinesFragment.OnHeadlineSelectedListener{
...
public void onArticleSelected(int position) {
// 用户选中HeadlinesFragment中的头标题后
// 做一些必要的业务操作
ArticleFragment articleFrag = (ArticleFragment)
getSupportFragmentManager().findFragmentById(R.id.article_fragment);
if (articleFrag != null) {
// 这里是实现大屏适应,如果 article frag 不为空,那么同时显示两个fragmnet的布局...
articleFrag.updateArticleView(position);
} else {
// 实现fragment之间的切换
//关联信息
// 创建fragment并给他一个跟选中的文章有关的参数
ArticleFragment newFragment = new ArticleFragment();
Bundle args = new Bundle();
args.putInt(ArticleFragment.ARG_POSITION, position);
newFragment.setArguments(args);
//实现跳转
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
// 用这个fragment替换任何在fragment_container中的东西
// 并添加事务到back stack中以便用户可以回退到之前的状态
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
// 提交事务
transaction.commit();
}
}
}
在onArticleSelected里实现跳转fragment跳转的代码。在fragment里调用调用interface就是调用这里的具体实现代码,类似于fragment调用activity里的普通方法一样。