ViewPager中的Fragment之间通信

1.主Activity

fragmentList = new ArrayList<>();

fg_one = new OneFragment();
fg_two = new TwoFragment();
fg_three = new ThreeFragment();

fragmentList.add(fg_one);
fragmentList.add(fg_two);
fragmentList.add(fg_three);

fragmentAdapter = new FragmentAdapter(getSupportFragmentManager(),fragmentList);
viewPager.setAdapter(fragmentAdapter);
viewPager.setCurrentItem(0);
viewPager.setOffscreenPageLimit(2);

方法1:

通过接口

首先创建接口,第一个为传递的数据,第二个为需要传递到第几个fragment,对于在Mainactivity中的fragmentList来说

public interface FragmentMessgeI {
    void transferString(String s,int i);
}

之后再Mainactivity中实现该接口

@Override
public void transferString(String s,int i) {
    switch (i){
        case 0:
            OneFragment fragment = (OneFragment) fragmentList.get(i);
            fragment.SetText(s);
            break;
        case 1:
            TwoFragment fragment1 = (TwoFragment) fragmentList.get(i);
            fragment1.SetText(s);
            break;
        case 2:
            ThreeFragment fragment2 = (ThreeFragment) fragmentList.get(i);
            fragment2.SetText(s);
            break;
    }
}

 然后在fragment中创建接口变量,并在onattach方法中实例化

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    callback = (FragmentMessgeI) context;
}

最后就是正常的调用了

callback.transferString("接口从2跳到1",0);
public void SetText(String s){
    fg_tv.setText(s);
}

 方法二:

通过广播

首先在fragment中创建广播

lass ReceiveBroadCast extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        SetText(intent.getStringExtra("text"));
    }
}

然后注册

@Override
    public void onAttach(Context context) {
        super.onAttach(context);
        callback = (FragmentMessgeI) context;
        receiveBroadCast = new ReceiveBroadCast();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.bai.three");
        getActivity().registerReceiver(receiveBroadCast,intentFilter);
    }

@Override
public void onDestroy() {
    super.onDestroy();
    if (receiveBroadCast!=null){
        getActivity().unregisterReceiver(receiveBroadCast);
    }
}

最后在需要传递数据的fragment中发送

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.button:
            callback.transferString("接口从2跳到1",0);
            Intent intent = new Intent();
            intent.putExtra("text","广播从2到3");
            intent.setAction("com.bai.three");
            getActivity().sendBroadcast(intent);
            break;
    }
}

第三种方法:

通过获取fragment实例:

首先在MainActivity中保存fragment实例

然后在fragment中获取实例

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.button:
            callback.transferString("接口从1跳到2",1);
            MainActivity mainActivity = (MainActivity) getActivity();
            ThreeFragment threeFragment = (ThreeFragment) mainActivity.fragmentList.get(2);
            threeFragment.SetText("直接获取实例从1到3");
            break;
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在面试,可能会涉及到关于Fragment的一些常见问题,以下是一些可能会被问到的问题及其答案: 1. 什么是FragmentFragment是Android的一种可重用的组件,它可以与Activity进行交互,作为Activity界面的一部分进行展示。它可以有自己的布局和生命周期,并且可以被添加、移除、替换或者在Activity进行切换。 2. Fragment的生命周期是什么样的? Fragment的生命周期包括以下几个方法:onAttach、onCreate、onCreateView、onActivityCreated、onStart、onResume、onPause、onStop、onDestroyView、onDestroy和onDetach。这些方法提供了在Fragment生命周期不同阶段执行代码的机会,开发者可以在这些方法处理相关的逻辑。 3. Fragment和Activity之间通信方式有哪些? Fragment和Activity之间可以通过接口回调、广播、观察者模式等方式进行通信。其,接口回调是最常见的方式,Activity可以实现一个接口,Fragment通过该接口将数据传递给Activity。广播和观察者模式可以用于更复杂的场景,可以实现多个Fragment和Activity之间通信。 4. FragmentPagerAdapter和FragmentStatePagerAdapter有什么区别? FragmentPagerAdapter和FragmentStatePagerAdapter都是ViewPager的适配器,用于管理Fragment的切换。区别在于FragmentPagerAdapter会保留Fragment的状态,而FragmentStatePagerAdapter会销毁之前的Fragment,适用于有大量Fragment的情况。 5. getFragmentManager、getSupportFragmentManager和getChildFragmentManager有什么区别? getFragmentManager是用于获取与当前Fragment关联的FragmentManager,通常用于在Fragment获取父级Activity的FragmentManager。getSupportFragmentManager是Support库的方法,用于获取兼容版本的FragmentManager,通常用于在Support库使用Fragment。getChildFragmentManager是用于获取Fragment嵌套的子级FragmentManager,通常用于在一个Fragment管理另一个Fragment。 以上是一些关于Fragment的常见面试题及其答案。希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值