在Button OnClickListener回调

时间:2017-04-04 15:35:57

标签: android-fragments android-dialogfragment buttonclick dismiss

我的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();回调(DialogFragmentCamera仍然可见后,onActivityResult行不会忽略DialogFragment。如果我手动按Button(不使用方法performClick),一切正常。

有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

只需尝试dismiss()即可关闭对话框和片段而不是getDialog().dismiss(),它只会解除对话框而不是片段。

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

  

void dismiss()

     

关闭片段及其对话框。如果片段被添加到后台堆栈,则将弹出所有后台堆栈状态,包括此条目。否则,将提交一个新事务来删除该片段。

更新

这是另一个想法。您正试图在DialogFragment的视图完全就绪之前关闭对话框。一旦按钮可用于推送,即布局完成,这不是问题。

尝试在生命周期的后期移动自动解除。我认为这对你有用。