我的DialogFragment
中有一个自定义class
作为内部Activity
。自定义DialogFragment
包含2 Buttons
。
第一个Button
打开Camera
,第二个打开Gallery
。
通常在按下DialogFragment
后会显示Image
。
直到这里一切都很好。
现在我想添加一项新功能。第一次打开Activity
时,我想自动打开Camera
,这意味着我想"按"我Button
的第一个DialogFragment
。
在我的Activity
onCreate
方法中,我只显示DialogFragment
并点击第一个Button
。问题是DialogFragment
没有被驳回。
这是我的代码:
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;
}
}
以下是我的称呼方式:
FragmentManager fm = getSupportFragmentManager();
MyDialogFragment myDialogFragment = MyDialogFragment.newInstance();
myDialogFragment.show(fm, "");
在getDialog().dismiss();
回调(DialogFragment
)Camera
仍然可见后,onActivityResult
行不会忽略DialogFragment
。如果我手动按Button
(不使用方法performClick
),一切正常。
有什么想法吗?
感谢。
答案 0 :(得分:0)
只需尝试dismiss()
即可关闭对话框和片段而不是getDialog().dismiss()
,它只会解除对话框而不是片段。
https://developer.android.com/reference/android/app/DialogFragment.html#dismiss()
void dismiss()
关闭片段及其对话框。如果片段被添加到后台堆栈,则将弹出所有后台堆栈状态,包括此条目。否则,将提交一个新事务来删除该片段。
更新:
这是另一个想法。您正试图在DialogFragment
的视图完全就绪之前关闭对话框。一旦按钮可用于推送,即布局完成,这不是问题。
尝试在生命周期的后期移动自动解除。我认为这对你有用。