【问题标题】:Closing a dialog window when a user selects an item from the list in android当用户从android中的列表中选择一个项目时关闭一个对话框窗口
【发布时间】:2017-10-05 14:20:15
【问题描述】:

我在 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

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

【问题讨论】:

  • 看起来您应该使用 DialogFragment,因为它是框架的一部分,并且与 Blurred Dialog(三年未更新)完全相同。如果您使用 DialogFragment,您可以只使用 dismiss() 方法,请参见此处:developer.android.com/reference/android/app/…

标签: java android dialog


【解决方案1】:

使用final AlertDialog builder = new AlertDialog.Builder(getActivity()).create() 代替final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) 创建对话框并在设置视图后显示对话框,如dialog.show()

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

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

            //YOUR CODE SHOULD COME HERE

        }
    });

【讨论】:

    【解决方案2】:

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

    "请注意,在这种情况下,fragment 没有放在后台堆栈上,它只是作为无限期运行的片段添加。因为对话框通常是模态的,所以它仍然作为后台堆栈运行,因为对话框会捕获用户输入直到它被解除。当它被解除时,DialogFragment 将负责将自己从其片段管理器中删除。"

    也许如果你调用dismiss()它会起作用。

    公共方法 无效解雇() 关闭片段及其对话框。

    【讨论】:

      猜你喜欢
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多