如何将对话框片段的结果接收到对话框片段

问题描述:

我有一个用于许多活动的对话框A.我创建了新的对话框B并实现了一个接口来从A获得调用。在这两种情况下,我都使用了对话框片段。对于很多活动我可以从使用如何将对话框片段的结果接收到对话框片段

if (getActivity() instanceof MyActivity) 
((MyActivity) getActivity()).manageSelectedItem(); 

管理回调但如果对话A在另一个对话框乙托管那么如何管理回调。

我已经在this上搜索并找到基于Activity/FragmentActivity/Fragment的解决方案,但无法解决DialogFragment上的问题。

+0

再次什么是问题?你是否试图将数据从'DialogFragment' B传递给'DialogFragment' A?你找到的解决方案,它有什么问题? –

我已经解决了issue.I只是实现对话框B.Checks一个界面,在对话框中onCreate方法托管对话框是否是活动/对话初始化界面。

下面是代码

对话框DialogTwo为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(); 
    } 
} 

电话:

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 
} 

我建议你看看Bus或使用BroadcastReceiver做它,倍数回调可以让你的代码耦合,这对维护是可怕的。

+0

谢谢。我张贴我的解决方案。 – Patriotic

您可以在此找到答案heare。或者你可以锁定片段beerwin Activity。

getSuportFragmentManager().findFragmentByTag(TAG_FRAGMENT_A).callback(); 
+0

谢谢。我张贴我的解决方案。 – Patriotic