2016-06-15 8 views
0

私は既に開いているダイアログのフラグメントをクリックしてダイアログのフラグメントを開くことができます。元のままにしておき、新しいものを開いたままにするか、オリジナルを非表示にしてから、2番目のダイアログフラグメントが解除されたときに再び開きます。私がそれをやろうとする前にこれが実現可能かどうか疑問に思って、おそらく私の時間を無駄にするでしょう。誰も助言することはできますか?アンドロイドのダイアログフラグメントからダイアログフラグメントを起動することは可能ですか

+0

他の誰かがこれを試している場合は、アクティビティからダイアログフラグメントを呼び出すよりも複雑ではないようです。私が遭遇した問題は、ダイアログの断片のonAttachメソッドに関連していました。この時点でのコンテキストは、元の呼び出しアクティビティに関連しており、ダイアログフラグメントではありませんでした。これは、アクティビティが最初のダイアログフラグメントの代わりにインターフェイスを実装する必要があることを意味します。まだこれが論理を破るかどうかはわかりません。私がこれを理解すると、もう少し投稿して、うまくいけば誰かに役立つだろう。 –

+0

このコードは、エラーがスローされる場所であり、最初のアクティビティが2番目のダイアログフラグメントのインターフェイスを実装する必要があると参照されています。 'code' @Override public void onAttach(コンテキストコンテキスト){ super.onAttach(コンテキスト); if(context instanceof OnColourPickerFragmentInteractionListener){ mListener =(OnColourPickerFragmentInteractionListener)コンテキスト; } else { 新しいRuntimeExceptionをスローする(context.toString() + "OnFragmentInteractionListenerを実装する必要があります"); } } 'code' –

答えて

0

上記のコメントに続き、次のコードが動作するようになりました(ロジックはまだ実装されていませんが、テスト用ハンドセットでコンパイルされて実行されます)。上記のonAttachメソッドを次のコードに置き換えました。

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 

    TextPropertiesDialogFragment prev = (TextPropertiesDialogFragment) getFragmentManager().findFragmentByTag("TextPropertiesDialogFragment"); 
    if (prev != null) { 
     if (prev instanceof OnColourPickerFragmentInteractionListener) { 
      mListener = (OnColourPickerFragmentInteractionListener) prev; 
     } else { 
      throw new RuntimeException(prev.toString() 
        + " must implement OnFragmentInteractionListener"); 
     } 
    } 
} 

このonAttachメソッドは、OnColourPickerDialogFragmentという2番目のダイアログフラグメントにあります。 TextPropertiesDialogFragmentは、アクティビティから呼び出される最初のダイアログフラグメントです。完成のために、以下にリスナーとインターフェイスの定義を含めました。

public class TextPropertiesDialogFragment extends DialogFragment implements View.OnClickListener, ColourPickerDialogFragment.OnColourPickerFragmentInteractionListener{ 

    public void colourPickerCallBackMethod(Bundle bundle){ 
    //Do some work here 
} 
//........ 
} 

public class ColourPickerDialogFragment extends DialogFragment implements View.OnClickListener { 

private View topLevelFragmentView; 
private OnColourPickerFragmentInteractionListener mListener; 
private Bundle callBackBundle; 

public interface OnColourPickerFragmentInteractionListener{ 
    void colourPickerCallBackMethod(Bundle callBackBundle); 
} 
//...... 
} 
関連する問題