如何从对话片段接收结果到对话片段
How to receive result from a dialog fragment to a dialog fragment
我有一个在许多活动中使用的对话框 A。我创建了新的对话框 B 并实现了一个接口来获取来自 A 的调用。在这两种情况下我都使用了对话框片段。对于许多活动,我可以使用
管理来自 A 的回调
if (getActivity() instanceof MyActivity)
((MyActivity) getActivity()).manageSelectedItem();
但是如果对话框 A 托管在另一个对话框 B 中,那么如何管理回调。
我在 this 上搜索并找到了基于 Activity/FragmentActivity/Fragment 的解决方案,但无法解决 DialogFragment 上的问题。
我建议你看看Bus或使用BroadcastReceiver
来做,多个回调可以让你的代码耦合,这很不利于维护。
您可以找到答案heare。或者你可以锁定片段 beerwin Activity.
getSuportFragmentManager().findFragmentByTag(TAG_FRAGMENT_A).callback();
我已经解决了 issue.I 刚刚在对话框 B.Checks 中实现了一个接口并在对话框 A 的 onCreate 方法中初始化了接口 是否托管对话框是 activity /dialog.
这是代码
DialogDialogTwo 作为 A :
public class DialogTwo extends DialogFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
if(!(getActivity() instanceof SelectedItemListener)) {
callback = (SelectedItemListener) getTargetFragment();
}
} catch (Exception e) {
throw new ClassCastException("Calling Fragment must implement SelectedItemListener");
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), R.style.AlertDialogCustom));
builder.setTitle(R.string.select_color)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
if (getActivity() instanceof SelectedItemListener) {
((NewExerciseActivity) getActivity()).manageSelectedItem();
}else {
callback.manageSelectedItem();
}
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
return builder.create();
}
}
来自对话 B 的呼叫:
private void showDialog() {
FragmentActivity activity = (FragmentActivity) getActivity();
FragmentManager fm = activity.getSupportFragmentManager();
DialogTwo dialogTwo = new DialogTwo();
dialogTwo.setTargetFragment(this,0);
dialogTwo.show(fm, "dialogTwo");
}
@Override
public void manageSelectedItem() {
//do something
}
我有一个在许多活动中使用的对话框 A。我创建了新的对话框 B 并实现了一个接口来获取来自 A 的调用。在这两种情况下我都使用了对话框片段。对于许多活动,我可以使用
管理来自 A 的回调if (getActivity() instanceof MyActivity)
((MyActivity) getActivity()).manageSelectedItem();
但是如果对话框 A 托管在另一个对话框 B 中,那么如何管理回调。
我在 this 上搜索并找到了基于 Activity/FragmentActivity/Fragment 的解决方案,但无法解决 DialogFragment 上的问题。
我建议你看看Bus或使用BroadcastReceiver
来做,多个回调可以让你的代码耦合,这很不利于维护。
您可以找到答案heare。或者你可以锁定片段 beerwin Activity.
getSuportFragmentManager().findFragmentByTag(TAG_FRAGMENT_A).callback();
我已经解决了 issue.I 刚刚在对话框 B.Checks 中实现了一个接口并在对话框 A 的 onCreate 方法中初始化了接口 是否托管对话框是 activity /dialog.
这是代码
DialogDialogTwo 作为 A :
public class DialogTwo extends DialogFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
if(!(getActivity() instanceof SelectedItemListener)) {
callback = (SelectedItemListener) getTargetFragment();
}
} catch (Exception e) {
throw new ClassCastException("Calling Fragment must implement SelectedItemListener");
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), R.style.AlertDialogCustom));
builder.setTitle(R.string.select_color)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
if (getActivity() instanceof SelectedItemListener) {
((NewExerciseActivity) getActivity()).manageSelectedItem();
}else {
callback.manageSelectedItem();
}
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
return builder.create();
}
}
来自对话 B 的呼叫:
private void showDialog() {
FragmentActivity activity = (FragmentActivity) getActivity();
FragmentManager fm = activity.getSupportFragmentManager();
DialogTwo dialogTwo = new DialogTwo();
dialogTwo.setTargetFragment(this,0);
dialogTwo.show(fm, "dialogTwo");
}
@Override
public void manageSelectedItem() {
//do something
}