Диалог BottomSheet открывается более одного раза - PullRequest
0 голосов
/ 25 февраля 2019

Я использую всплывающую подсказку для обмена сообщениями в социальных сетях.Теперь проблема в том, что она открывается не один раз.Пожалуйста, помогите мне решить эту проблему.

при нажатии кнопки я вызываю 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.теперь внутри этого метода у меня есть botomsheet.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 будет 3 изображения, он показывает dailog три раза и накладывает один на другой.

1 Ответ

0 голосов
/ 25 февраля 2019

Хорошо, удалите диалоговый вызов нижнего листа из цикла 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 ();метод и поместите его вне метода.

...