Fragment之间跳转实现

原创 2016年10月09日 08:49:18

一、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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/loongago/article/details/52763204

思考微软

不知道这篇文章能不能发到文档中心,因为他似乎和技术无关,但是我觉得,他还是有一定作用的。几年来思考,打了4个多小时的字,总不能帖到灌水乐园吧。  正文:第一次去参加产品发布会,就有幸能够去window...
  • daiguan
  • daiguan
  • 2001-12-03 08:16:00
  • 1596

Fragment 之间的跳转、返回

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

android从fragment跳转到fragment问题解决

今天遇到一个问题,虽然不是很小但是也不是很大,就是从fragmentA准确的跳到fragmentB去,还有就是从Activity准确的跳到fragment 去,后面这个问题让我想了好半天,最后还是处理...
  • SYIF88
  • SYIF88
  • 2016-01-25 17:39:23
  • 8497

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

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

Android中Fragment之间的跳转和数据的传递

由 Fragment1 跳转到 Fragment2 可以使用下面的方法:/** * 公共方法: 从碎片fragment1跳转到碎片fragment2 * * @para...
  • csdnzouqi
  • csdnzouqi
  • 2016-06-23 11:47:14
  • 7587

Android中Activity和Fragment页面跳转

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

Fragment之间的跳转

Fragment之间的跳转 需求:从FragmentOne 跳转至 FragmentTwo 方案:使用接口回调 HomeActivity作为主Activity,里面包含方法切换Fragment....
  • qianyefei25
  • qianyefei25
  • 2016-12-02 13:40:45
  • 134

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

在近期的练手项目中,我们使用到了Android Fragment技术。在应用的交互中,我可能需要实现: 从当前的fragment跳转到另一个fragment 从当前的fragment跳转到一个acti...
  • LeoLeoHan
  • LeoLeoHan
  • 2015-06-14 11:34:57
  • 29920

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

  • 2017年08月04日 15:31
  • 71KB
  • 下载

安卓中view、activity、fragment之间的相互跳转

在我们项目中经常碰到activity与fragment互相跳转的问题,其中解决方法大约也就那么几种,我以其中一个案例说一下,我要从自定义view跳转到fragment,当然不能之间跳转了我跳转到fra...
  • u010859484
  • u010859484
  • 2016-09-18 16:54:45
  • 1881
收藏助手
不良信息举报
您举报文章:Fragment之间跳转实现
举报原因:
原因补充:

(最多只允许输入30个字)