今天我们来探讨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;
}
Fragment1 f1=new Fragment1();
f1.setMainActivity(this);
这样Fragment2中就得到了MainActivity里面的方法了。
上面其实已经说过了。
看着可能有点儿乱 凑合看一下咯。慢慢理思路 忘了的话又来看以下博客。印象更深