Fragment向另一个Fragment进行传值通过Activity来传递在同一个Activity中

今天我们来探讨Fragment向另一个Fragment 进行传值。如何传?今天我们用Activity来传递。

前提条件是:这两个Fragment 必须依附于同一个Activity里面才行哈。当然你有3个甚至以上Fragment 也可以,

首先我们理一下思路。现在我有一个Fragment1    Fragment2   MainActivity.   

  我现在的需求是  Fragment1里面有一个广播接收者  接收到一个字符串,那么我要把这个字符串的值传递到Fragment2.   那现在我们有一个MainActivity.  因为现在我这两个Fragment1    Fragment2 是依附于MainActivity的。那肯定能得到这两个Fragment1    Fragment2 的对象。

那现在我们来看怎么传递,首先我们在Fragment1中获取到MainActivity的对象,怎么获取?看代码

private MainActivity mainActivity;

    public void setMainActivity(MainActivity mainActivity) {
        this.mainActivity = mainActivity;
    }
定义一个MainActivity,现在肯定这个是空的。那么我们就要通过SetMainActivity()这个方法来获取他的对象,

那这个MainActivity怎么传递过来。那我们现在就需要在MainActity里面 去得到Fagment1的对象。通过对象调用setActivity()的方法,把MainActivity传递过来。现在我们来看MainActivity里面的代码

Fragment1 f1=new Fragment1();
f1.setMainActivity(this);
现在这个this就代表MainActivity了。那Fragment1里面就有了MainActivity的对象了。

然后用MainActivity的对象调用MainActivity的方法。


我们就需要在MainActivity里面新建一个方法出来。


先我们来看在Fragment1中广播里面MainActivity的对象调用的该方法

 private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            if (BluetoothLeService.ACTION_GATT_CONNECTED.equals(action)) {  //已连接
                imageView4.setText("已连接");

                mainActivity.test("已连接");这是就是MainActivity的test()方法

            //    mConnected = true;
            //    updateConnectionState(R.string.connected);
            //    invalidateOptionsMenu();


            } else if (BluetoothLeService.ACTION_GATT_DISCONNECTED.equals(action)) {


                imageView4.setText("已断开");
                mainActivity.test("已断开");
                bluetoothDeviceList.clear();
                listAdapter.notifyDataSetChanged();
                Log.e("imageView4", "已经断开了");
那这个Test()方法肯定要在MainActivity里面定义出来

  public void test(String nam){
        Fragment2.ted(nam);
    }
那么在这个test()方法   刚刚是传递过来了一个已连接的值 肯定我们要定义出来的。那么在这个方法里面我们又用Fragment2.ted();这个方法。这个方法的目的就是要获取String nam这个值。

那么现在我们就看以下Fragment2里面的ted()方法。

  public void ted(String snme){
        changd.setText(snme);
    }

好 任务就已经完成了。 changd是一个textview。这样我们就把这个已连接或者已断开这个值传递到了Fragment2中。并设置到了textview上面



现在我们再来反推一下这个逻辑

Fragment2需要从Fragment1中获取到值,那首先我们再Fragment2中定义一个ted(String snme)这个方法,snme就是我们要的这个值。那这个方法现在Fragment1调用这个方法直接传递过来,肯定不行,因为他调用不到这个方法,那我就通过Mainactivity获取Frament的对象来调用这个方法。fragment2.ted(String snme)。然后再在MainActivity

里面新建一个方法 test(String snam)     把fragment2.ted(String snme)放进来。好 接下来用Frament2来调用MainActivity里面的方法test(String snam)就可以了。然后textview.settext(snam);就行了。要调用MainActivity里面的方法 肯定要得到MainActivity的对象。

private MainActivity mainActivity;

    public void setMainActivity(MainActivity mainActivity) {
        this.mainActivity = mainActivity;
    }


然后再MianActivity里面调用 

Fragment1 f1=new Fragment1();
f1.setMainActivity(this);
 这样Fragment2中就得到了MainActivity里面的方法了。

上面其实已经说过了。

看着可能有点儿乱   凑合看一下咯。慢慢理思路 忘了的话又来看以下博客。印象更深




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值