当用户从android中的列表中选择项目时关闭对话框窗口

时间:2017-10-04 23:59:53

标签: java android dialog

我在github上找到了一个用于android的自定义BlurDialog。它会打开一个带有选项的新对话窗口,并模糊屏幕其余部分的背景。我有完美的工作,但我遇到了一个问题,如果我在选项列表中选择一个项目,它将启动正确的活动,但是当我点击后退按钮时,我回到上一个活动和对话窗口仍然是开放的。关闭它的唯一方法是在对话框窗口外单击。

我试图找到在启动新活动之前如何关闭对话框窗口,以便当用户返回到该屏幕时,对话框窗口不再打开。我还是Android的新手,所以我确信我错过了一些非常简单的东西,我只是想不出来。这是我的片段中的“onCreateDialog”方法,它创建了模糊的对话框窗口......

@Override
    @NonNull
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        View view = getActivity().getLayoutInflater().inflate(R.layout.fragment_profile_dialog, null);
        TextView text = (TextView) view.findViewById(R.id.follow_or_unfollow);
        if(isSelf) {
            text.setText("Edit Profile");
        } else {
           text.setText((isFollowing) ? "UnFollow" : "Follow");
        }
        RelativeLayout followButton = (RelativeLayout) view.findViewById(R.id.follow_layout);
        RelativeLayout chatButton = (RelativeLayout) view.findViewById(R.id.chat_layout);


        followButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //NEED TO CLOSE DIALOG WINDOW HERE
                if(isSelf) {
                    //activate ProfileEditActivity
                    getActivity().startActivity(new Intent(getActivity(), EditProfileActivity.class));
                } else {
                    Map<String, Object> updates = new HashMap<>();
                    if(isFollowing) {
                        //unfollow
                        updates.put("/following/" + user.getUid() + "/users/" + userID, null);
                        updates.put("/followers/" + userID + "/users/" + user.getUid(), null);
                    } else {
                        updates.put("/following/" + user.getUid() + "/users/" + userID, true);
                        updates.put("/followers/" + userID + "/users/" + user.getUid(), true);
                        //follow
                    }
                    database.getReference().updateChildren(updates);
                    getFragmentManager().beginTransaction().remove(ProfileDialogFragment.this).commit();
                }
            }
        });

        chatButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getContext(), "Implement the start activity for chat", Toast.LENGTH_SHORT).show();
            }
        });

        builder.setView(view);
        return builder.create();
    }

我尝试在github页面上查看示例应用Blurred Dialog Github

但它仅显示如何激活对话框,而不是在用户选择对话框中的项目时如何实际关闭对话框。其他一切工作都很完美,如果我单击一个项目就会启动正确的活动,如果我在对话框外单击该对话框就会关闭。我只需要在用户单击对话框中的项目后以编程方式关闭它。谢谢。

2 个答案:

答案 0 :(得分:1)

而不是final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())使用final AlertDialog builder = new AlertDialog.Builder(getActivity()).create()创建对话框,并在显示dialog.show()等视图后显示对话框。

当用户点击屏幕上的内容时,您可以使用dialog.dismiss()之类的对话框对象关闭对话框,即在您的关注按钮内点击

followButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
             dialog.dismiss()

            //YOUR CODE SHOULD COME HERE

        }
    });

答案 1 :(得分:0)

根据开发者网站https://developer.android.com/reference/android/app/DialogFragment.html

&#34;请注意,在这种情况下,片段不会放在后端堆栈上,它只是作为无限期运行的片段添加。由于对话框通常是模态的,因此对话框将捕获用户输入,直到它被解除为止。当它被解雇时,DialogFragment会负责将自己从片段管理器中删除。&#34;

也许如果你打电话给dismiss()它会起作用。

公共方法 void dismiss() 关闭片段及其对话框。