2016-06-21 95 views
1

我有一個用於許多活動的對話框A.我創建了新的對話框B並實現了一個接口來從A獲得調用。在這兩種情況下,我都使用了對話框片段。對於很多活動我可以從使用如何將對話框片段的結果接收到對話框片段

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

管理回調但如果對話A在另一個對話框乙託管那麼如何管理回調。

我已經在this上搜索並找到基於Activity/FragmentActivity/Fragment的解決方案,但無法解決DialogFragment上的問題。

+0

再次什麼是問題?你是否試圖將數據從'DialogFragment' B傳遞給'DialogFragment' A?你找到的解決方案,它有什麼問題? –

回答

1

我已經解決了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 
} 
1

我建議你看看Bus或使用BroadcastReceiver做它,倍數回調可以讓你的代碼耦合,這對維護是可怕的。

+0

謝謝。我張貼我的解決方案。 – Patriotic

1

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

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

謝謝。我張貼我的解決方案。 – Patriotic