关闭

Fragment之间跳转实现

标签: Fragment跳转
4576人阅读 评论(1) 收藏 举报
分类:

一、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里的普通方法一样。

附上谷歌官方demo。http://download.csdn.net/detail/loongago/9648329

3
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

两个Fragment之间的跳转,和数据的传递

作为一个android的菜鸟,前些天在做项目的时候yo
  • zwluoyuxi
  • zwluoyuxi
  • 2014-07-09 16:39
  • 8457

两个Fragment之间的跳转,和数据的传递

需求:从一个Fragment跳转到另一个Fragment,并且还要传递数据,就像Activity的跳转一样。  1、首先在第一个Fragment 里面拿到FragmentManger...
  • u012482178
  • u012482178
  • 2016-03-28 16:28
  • 3181

Fragment 之间的跳转、返回

Fragment即Activity中的片段,可以理解为一个带有生命周期的View。它的生命周期也与它所承接的Activity密切相关。在Activity中添加Fragment需要调用FragmentT...
  • Gary__123456
  • Gary__123456
  • 2017-03-20 20:59
  • 766

通过接口的方式实现fragment之间的跳转操作

  • 2017-08-04 15:31
  • 71KB
  • 下载

两个Fragment之间的跳转,和数据的传递

需求:从一个Fragment跳转到另一个Fragment,并且还要传递数据,就像Activity的跳转一样。  1、首先在第一个Fragment 里面拿到FragmentManger 和Fra...
  • r8HZGEmq
  • r8HZGEmq
  • 2015-05-24 10:51
  • 15053

ViewPager + Fragment处理两个Fragment的点击跳转以及之间的传递数据

ViewPager + Fragment处理两个Fragment的点击跳转以及之间的传递数据
  • canot
  • canot
  • 2016-01-17 21:17
  • 4757

Android -------- 从一个Fragment跳转到另一个Fragment

一、直接getActivity,使用activity的fragmenttransation的replace方法替换 private void changeToAnotherFragment(){ ...
  • bfboys
  • bfboys
  • 2016-11-16 23:16
  • 4781

Activity之间、Fragment之间和Activity与Fragment之间的跳转

1、Activity之间的跳转有两种: (1)不需要返回值的跳转:startActivity(new Intent(this, Activity.class)); (2)带返回值的跳转: Activi...
  • wpj1119245135
  • wpj1119245135
  • 2016-04-14 16:32
  • 12025

Android中Activity和Fragment页面跳转

这几天看了一个项目源码,他们的页面跳转很少使用Activity,而是使用fragment,所以这几天准备整理一下fragment和activity的页面跳转问题。在我看来页面跳转分为activity之...
  • anhui_zhangxun
  • anhui_zhangxun
  • 2016-04-26 16:48
  • 8543

fragment与activity及两个fragment之间的跳转实现

在近期的练手项目中,我们使用到了Android Fragment技术。在应用的交互中,我可能需要实现: 从当前的fragment跳转到另一个fragment 从当前的fragment跳转到一个acti...
  • LeoLeoHan
  • LeoLeoHan
  • 2015-06-14 11:34
  • 28523
    个人资料
    • 访问:36204次
    • 积分:676
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:1篇
    • 译文:0篇
    • 评论:6条
    最新评论