当前位置: 首页 > 知识库问答 >
问题:

对话框再次弹出几次(不是任何类似问题的重复)

曾德水
2023-03-14

所以这件事从过去几天开始一直困扰着我。我的PostAdapter类中有一个对话框。当有人单击“更多”菜单时,会出现一个对话框(显示为底部工作表)。显示对话框没有问题。它工作得很好。但问题是点击“更多”后,如果我执行任何其他操作,对话框会自动打开几次。我必须在屏幕上点击很多次,以消除每个打开的对话框。我已经删除了代码中的对话框,但这种行为非常出乎意料。每次我对帖子执行一些操作时,对话框都会打开,即使在片段之间切换并返回显示所有帖子的主片段之后也是如此。

这很奇怪,因为对话框应该只在单击“更多”时打开,而不是在任何其他操作上打开。我试过在一些类似的问题中给出的解决方案,但没有一个奏效。

viewHolder.binding.more.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    FirebaseDatabase.getInstance().getReference()
                            .child("Posts")
                            .child(post.getPostId())
                            .addValueEventListener(new ValueEventListener() {
                                @Override
                                public void onDataChange(@NonNull DataSnapshot snapshot) {
                                    if (snapshot.exists()) {
                                        String postedBy = snapshot.child("postedBy").getValue().toString();
                                        if (FirebaseAuth.getInstance().getCurrentUser().getUid().equals(postedBy)) {
                                            showBottomSheetDialog(post, holder);
                                        } else {
                                            showBottomSheetDialogForOthersPosts(post, holder);
                                        }
                                    }
                                }

                                @Override
                                public void onCancelled(@NonNull DatabaseError error) {

                                }
                            });
                }
            });

    private void showBottomSheetDialogForOthersPosts(Post post, RecyclerView.ViewHolder holder) {
        final Dialog dialog = new Dialog(context);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.bottomsheetlayout_othersposts);

        LinearLayout share = dialog.findViewById(R.id.share);
        LinearLayout report = dialog.findViewById(R.id.report);

        share.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                dialog.dismiss();
                Toast.makeText(context, "Share is clicked", Toast.LENGTH_SHORT).show();
            }
        });

        report.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                dialog.dismiss();
                Toast.makeText(context,"Report is Clicked",Toast.LENGTH_SHORT).show();

            }
        });

        dialog.show();
        dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        dialog.getWindow().getAttributes().windowAnimations = R.style.BottomSheetDialogAnimation;
        dialog.getWindow().setGravity(Gravity.BOTTOM);
    }

共有1个答案

司寇高洁
2023-03-14

您必须获得多个回调

public void onDataChange(@NonNull DataSnapshot snapshot) {}

我建议您全局声明对话框,并检查该对话框是否已经可见,如果不可见,则只显示该对话框。

final Dialog dialog = new Dialog(context);
 类似资料:
  • 通过范围目录访问开通权限是一种更简单的方法,但是对话框将显示一个名为“不要再问”的复选框。如果用户选择不要再问,并拒绝请求,所有未来的请求从您的应用程序给定的目录将被自动拒绝,没有请求UI将呈现给用户。应用程序无法获取权限对话框。 我们如何处理这件事?

  • 问题内容: 如果用户到达程序末尾,我希望他们得到一个提示,询问他们是否要重试。如果他们回答是,我想重新运行该程序。 问题答案: 您可以将整个程序放在另一个while循环中,该循环询问用户是否要重试。

  • 5.8.2.再重构一次? 我们希望用户能够在不同的界面中感受到一致的体验,也希望我们自己管理代码能够更容易些——再重构一次吧。在此我们引入一个BaseActivity作为所有Activity的基类,将重用的代码提取出来。

  • 我正在使用Blueprint和jQueryUI/jQuery1.11。1与。Net MVC在我正在从事的项目中。 这是模式对话框的代码,我在布局页面的部分视图中看到了该对话框。提交表单时,我有以下代码显示弹出窗口: 我需要用class="jquery_elem"包装jQuery添加到页面底部的div,因为我选择了jQuery UI的作用域为这个选择器。我使用以下CSS的覆盖: 但是,当我单击“提交

  • 本文向大家介绍Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法,包括了Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法的使用技巧和注意事项,需要的朋友参考一下 Chrome浏览器的alert弹窗,选择了禁止再次弹出后,就不会再弹出了。 第一次弹出alert弹窗没有“禁止此页再显示对话框”选项,第二次和以后才有。 这个功能在开发测试中,或者程序出现bug时,页面不断弹出对话框时,

  • 5.7.2.再次重构代码 到这里不妨再重构一下代码。不必吝惜重构的机会,它是长线投资,甜头只有在后面才尝的出来。