Android: 从DialogFragment 回调片段?
Android: Callback to fragment from DialogFragment?
我知道要将片段中的某些内容传递回其调用 activity 您可以使用具有 "activity" 参数的 onAttach。您可以将 activity 设置为变量并稍后在其上调用接口。因此将数据从片段传回 activity。都很棒。
我想做同样的事情,但这次我有一个标准片段,我想调用一个 DialogFragment
,然后让 DialogFragment
回调到原始片段,但我可以't use onAttach
是想要 Activity
.
有人知道这样做的最佳方法吗?
谢谢
从那里联系另一个片段的一种方法是在 Activity
:
中实现的方法中访问它
//In your Activity...
@Override
public void callbackFromFragmentA(){
FragmentB fragment = (FragmentB) getFragmentManager.findFragmentById(android.R.id.content);
if (fragment != null) {
fragment.callFragmentMethod();
}
}
显然你可以在你的 activity 中制作东西 public 并从你的片段中设置它们。但是你必须保留对 activity 的引用,并且可能有不需要的 public 变量 and/or 设置器。
您可以使用 EventBus 而您不需要这些。
在您的activity中您需要注册一个活动
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
// This method will be called when a MessageEvent is posted
public void onEvent(MessageEvent event){
Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}
然后您可以简单地从您的片段或您喜欢的任何地方调用您的事件,
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
可以找到更多关于 EventBus 的信息here
还有 another possibly useful tutorial.
我知道要将片段中的某些内容传递回其调用 activity 您可以使用具有 "activity" 参数的 onAttach。您可以将 activity 设置为变量并稍后在其上调用接口。因此将数据从片段传回 activity。都很棒。
我想做同样的事情,但这次我有一个标准片段,我想调用一个 DialogFragment
,然后让 DialogFragment
回调到原始片段,但我可以't use onAttach
是想要 Activity
.
有人知道这样做的最佳方法吗?
谢谢
从那里联系另一个片段的一种方法是在 Activity
:
//In your Activity...
@Override
public void callbackFromFragmentA(){
FragmentB fragment = (FragmentB) getFragmentManager.findFragmentById(android.R.id.content);
if (fragment != null) {
fragment.callFragmentMethod();
}
}
显然你可以在你的 activity 中制作东西 public 并从你的片段中设置它们。但是你必须保留对 activity 的引用,并且可能有不需要的 public 变量 and/or 设置器。
您可以使用 EventBus 而您不需要这些。
在您的activity中您需要注册一个活动
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
// This method will be called when a MessageEvent is posted
public void onEvent(MessageEvent event){
Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}
然后您可以简单地从您的片段或您喜欢的任何地方调用您的事件,
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
可以找到更多关于 EventBus 的信息here 还有 another possibly useful tutorial.