首页 > 解决方案 > BottomSheet 对话框打开不止一次

问题描述

我正在使用bottomsheetlayout 弹出来进行社交媒体共享。现在的问题是,它打开了不止一次。请帮我解决这个问题。

在我的按钮上单击我调用 asynctask 来下载图像。

@Override
        protected void onPostExecute(Void res) {
            super.onPostExecute(res);
            //prodImageUri1.addAll(prodImageUri);

            if(single_rdb.isChecked())
            {
                   createImageBitmap();
            }
            else if(allimg_rdb.isChecked())
            {

                 temps=new ArrayList<>();
                for(int i=0;i<prodImageUri.size();i++)
                {
                    if(i==8)
                    {
                        break;
                    }
                    temps.add(prodImageUri.get(i));
                   // System.out.println("SIZE "+temps.size()+"TEST1 "+temps.get(i));
                    createImageBitmap();

                }

            }

        }

这里我调用 createImageBitmap 方法。现在在这个方法里面我有 bottomsheet.show

 public void createImageBitmap(){
   ...................
   ...................
 if(single_rdb.isChecked())
        {
            header_image.setImageURI(prodImageUri.get(0));
            imageview1.setVisibility(View.GONE);
            imageview2.setVisibility(View.GONE);
            imageview3.setVisibility(View.GONE);
            horizontal_image_layout.setVisibility(View.GONE);
        }
        else if(allimg_rdb.isChecked())
        {
            arrayListClone =  (ArrayList<Uri>) temps.clone();
            for(int i=0;i<arrayListClone.size();i++)
            {
               //System.out.println("FAFA"+arrayListClone);
                header_image.setImageURI(arrayListClone.get(i));
               // System.out.println("SIZE "+temps.size()+"TEST "+temps.get(i));
            }

            imageview1.setVisibility(View.GONE);
            imageview2.setVisibility(View.GONE);
            imageview3.setVisibility(View.GONE);
            horizontal_image_layout.setVisibility(View.GONE);
        }

         for(int i=0;i<arrayListClone.size();i++)
        {
            if(i==1)
            {
                break;
            }
            System.out.println("This is check");
            addPhotoBottomDialogFragment = new BottomSheetSharingFragment1();
            addPhotoBottomDialogFragment.show(((FragmentActivity)context).getSupportFragmentManager(),
                    "add_photo_dialog_fragment");
        }

我想要实现的是,bottomDailog 应该只打开一次,现在它正在根据 Image 的 arraylist 的大小打开。例如,如果 arraylist 将有 3 张图像,它会显示 dailog 三次并相互放置。

标签: androidandroid-asynctaskandroid-alertdialog

解决方案


好的,从您的 for 循环中删除底部工作表对话框调用并将其放置在它执行多次的 for 循环之外,因为 for 循环在 for 循环到达数组列表的末尾之前它将继续执行。因此,只需删除底部工作表并将其放在 for 循环之外,由于这段代码,您将面临问题:

for(int i=0;i<prodImageUri.size();i++)
                {
                    if(i==8)
                    {
                        break;
                    }
                    temps.add(prodImageUri.get(i));
                   // System.out.println("SIZE "+temps.size()+"TEST1 "+temps.get(i));
                    createImageBitmap();

                }

所以只需从您的 createImageBitmap() 中删除底部工作表对话框;方法并将其放在方法之外。


推荐阅读