0

の中にDialogFragmentというカスタムをclassとして持っています。カスタムDialogFragmentは、2 Buttonsを含む。 最初のButtonCameraを開き、2番目はGalleryを開きます。ボタンOnClickListenerコールバックでAndroid DialogFragmentが解除されない

通常、このDialogFragmentは、Imageを押した後に表示されます。 ここまではすべて問題ありません。

今、新しい機能を追加します。 Activityが初めて開かれたときに、私はCameraを自動的に開きたいと思っています。つまり、DialogFragmentの最初のButtonを「押してください」という意味です。私はちょうどDialogFragmentを示し、最初のButtonのクリックを実行し、私のActivityonCreate方法で

。問題は、DialogFragmentが却下されないということです。ここで

は私のコードです:

FragmentManager fm = getSupportFragmentManager(); 
MyDialogFragment myDialogFragment = MyDialogFragment.newInstance(); 
myDialogFragment.show(fm, ""); 

DialogFragmentがあるCameraコールバック(onActivityResult)の後、DialogFragmentを却下しませんgetDialog().dismiss();ライン:

public static class MyDialogFragment extends DialogFragment { 
    Button openCameraButton; 
    Button openGalleryButton; 
    boolean openCameraAutomatically; 

    public static MyDialogFragment newInstance(boolean openCameraAutomatically) { 
     MyDialogFragment f = new MyDialogFragment(); 
     Bundle args = new Bundle(); 
     args.putBoolean("open_camera", openCameraAutomatically); 
     f.setArguments(args); 
     return f; 
    } 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     openCameraAutomatically = getArguments().getBoolean("open_camera"); 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.my_dialog, container, false); 
     getDialog().setTitle("title"); 

     openCameraButton = (Button) rootView.findViewById(R.id.open_camera_button); 
     openCameraButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // launch Camera Intent... 
       getDialog().dismiss(); 
      } 
     }); 

     openGalleryButton = (Button) rootView.findViewById(R.id.open_gallery_button); 
     openGalleryButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // Launch Gallery Picker Intent 
       getDialog().dismiss(); 

      } 
     }); 


     if(openCameraAutomatically) { 
      openCameraButton.performClick(); 
     } 

     return rootView; 
    } 

} 

そして、ここでは、私はそれを呼び出す方法ですまだ目に見える。 Buttonを手動で(performClickメソッドを使用せずに)押すと、すべて正常に動作します。

アイデア?

ありがとうございました。

答えて

0

getDialog().dismiss()の代わりに、ダイアログとフラグメントを破棄するだけで、ダイアログとフラグメントを閉じるには、dismiss()を試してください。

https://developer.android.com/reference/android/app/DialogFragment.html#dismiss()

ボイド(解任)

は、フラグメントおよびそのダイアログを閉じます。フラグメントがバックスタックに追加された場合、このエントリまでのすべてのバックスタック状態がポップされます。それ以外の場合は、新しいトランザクションがフラグメントを削除するためにコミットされます。

更新

ここでは別の考えがあります。 DialogFragmentのビューが完全に準備される前にダイアログを閉じようとしています。これは、プッシュするためのボタンが利用可能になったら、つまりレイアウトが完了しても問題ありません。

ライフサイクルの後半で自動解任を試みてください。私はそれがあなたのために働くと思う。

関連する問題