Fragment回调Activity

作者: 坑吭吭 | 来源:发表于2017-02-09 11:30 被阅读144次
应用场景

如果你需要在fragment中处理一些事情,事情的处理结果或者你需要告 诉activity马上要做什么事,这时候就需要和activity进行通讯。包括很多fragment在viewpager中的情况,而且可以保证activity能即时进行响应。相比发送广播,性能更好,代码更少。

实战

假设有这样一个需求:在一个activity中有一个viewpager,viewpager里面有几个fragment,其中的一个fragment里面有一个任务,这个任务做完之后需要跳转到其他的fragment。

分析

既然需要跳转的到的fragment在viewpager里,那么只要控制viewpager跳转就可以了,而viewpager在activity里,我们是不是可以告诉activity一声让它处理一下就可以了呢?

步骤

1.定义回调

     public interface OnFinishListener{
        void onSuccess(int position);//这里可以定义参数传给activity,也可以没有
    }

2.实现接口
让activity实现这个接口:

public class DemoActivity extends AppCompatActivity implements DemoFragment.OnFinishListener

这里需要在回调中让viewpager切换页面,所以:

@Override
    public void onSuccess(int position) {
        viewpager.setCurrentItem(position);
    }

3.获取实例(关键部分)
首先定义一个全局变量

private OnFinishListener listener;

然后重写fragment的onAttach(Context context)方法:

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            listener = (OnFinishListener) context;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

由于onAttach(Activity activity)这个方法已经被标记过时,这里推荐用onAttach(Context context)来给全局变量listener赋值
注意:这里这个方法的注释为

     /**
     * Called when a fragment is first attached to its context.
     * {@link #onCreate(Bundle)} will be called after this.
     */

意思是这个方法只有在第一次附着在activity上时被调用,而且是在onCreate(Bundle)方法前调用,所以理论上也可以在onCreate(Bundle)中回调该Activity

4.根据业务进行回调
这里我们只需要在需要Activity切换fragment的地方调用

        if (listener != null) {
            listener.onSuccess(1);
        }
结语

各位看官如果有何其它不同的观点或建议,希望大家可以在下面留言讨论。

相关文章

  • Fragment传值到Activity

    采用接口回调机制 在Fragment中定义接口 当Fragment被加载到Activity的时候会被回调,判断宿主...

  • Fragment向Activity传递值

    一.Fragment向Activity传值的步骤 接口回调传递(5部曲) fragment中准备回调接口 接口中...

  • 碎片

    碎片布局left_fragment.xml 重写Fragment类 修改activity_main.xml 回调方法

  • Fragment回调Activity

    应用场景 如果你需要在fragment中处理一些事情,事情的处理结果或者你需要告 诉activity马上要做...

  • Fragment生命周期详解

    1.activity和fragment的对比 onAttach()这个是回调函数,这个时候 activity已经传...

  • BJC_oppo 面试题

    Fragment activity交互 1、EventBus、 2、接口回调 3、Bundle和setArgume...

  • 抽mvp

    第一版: Activity fragment Model View Presenter 接口回调 第二版: ---...

  • 如何在Fragment获得onActivityResult

    在activity中常常要用到onActivityResult回调获得相关数据,而有些操作是在Fragment里面...

  • 2022-01-05 ARouter使用

    Fragment内跳转activity,不能onActivityResult回调问题解决方案: 第一 首先,继承A...

  • Fragment给Activity传值

    Fragment给Activity传值,是通过回调函数实现的。1、在fragment端,创建一个接口,并写一个方法...

网友评论

    本文标题:Fragment回调Activity

    本文链接:https://www.haomeiwen.com/subject/jvliittx.html