没有魔法。
你可以用两种方法来实现。
- 使用回调。
创建接口和类,通过子Fragment将数据传递给Activity。不需要修改桥接TabHostFragment
,因为片段始终依赖其母上下文(活动),无论有多少片段包装片段。
public class TwoStrings {
public TwoStrings(String one, String two){
this.one = one;
this.two = two;
}
public String one;
public String two;
}
首先声明接口。
public interface DataPassListener {
void dataPassed(TwoStrings data);
}
而且,在Activity中实现接口。
最后,让子Fragment确认母亲Activity有回调监听器。
public class DialogFragment1 extends DialogFragment {
DataPassListener listener;
@Override
public void onAttach(Activity activity) {
if (activity instanceOf DataPassListener)
listener = (DataPassListener) activity;
}
public void setDataPassListener(DataPassListener listener){
listener = ((DataPassListener) listener);
}
public void doSomeThing(){
if(listener != null) // important to prevent NullPointerException
listener.dataPassed("a", "b");
}
}
- 使用EventBus。
我更愿意使用Otto来发布和订阅数据。
要在活动收听订阅事件,
public class MainActivity extends Activity {
@Override
public void onResume() {
super.onResume();
BusProvider.getInstance().register(this);
}
@Override
public void onPause() {
super.onPause();
BusProvider.getInstance().unregister(this);
}
@Subscribe
public void onUpdateTwoStrings(TwoStrings event) {
// do something with data.
Log.d("string one", data.one);
Log.d("string two", data.two);
}
}
而且,在任何地方片段发布事件。
谢谢,这非常有帮助! –