の中にDialogFragment
というカスタムをclass
として持っています。カスタムDialogFragment
は、2 Buttons
を含む。 最初のButton
はCamera
を開き、2番目はGallery
を開きます。ボタンOnClickListenerコールバックでAndroid DialogFragmentが解除されない
通常、このDialogFragment
は、Image
を押した後に表示されます。 ここまではすべて問題ありません。
今、新しい機能を追加します。 Activity
が初めて開かれたときに、私はCamera
を自動的に開きたいと思っています。つまり、DialogFragment
の最初のButton
を「押してください」という意味です。私はちょうどDialogFragment
を示し、最初のButton
のクリックを実行し、私のActivity
onCreate
方法で
。問題は、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
メソッドを使用せずに)押すと、すべて正常に動作します。
アイデア?
ありがとうございました。