android - 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 三次并相互放置。
解决方案
好的,从您的 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() 中删除底部工作表对话框;方法并将其放在方法之外。