android - java.lang.IllegalStateException:已添加片段:BottomSheetFragment{fc9d1db} (f54104c4-f862-420b-b30a-3fbd835554cf)}
问题描述
我在我的项目中添加了 BottomSheetDialogFragment。这是下面的示例代码,以便更好地理解。
public class StickerBSFragment extends BottomSheetDialogFragment {
private ArrayList<String> arrayStickers;
private RecyclerView rvEmoji;
public StickerBSFragment() {
}
private StickerListener mStickerListener;
public void setStickerListener(StickerListener stickerListener) {
mStickerListener = stickerListener;
}
public interface StickerListener {
void onStickerClick(String sticker);
}
private BottomSheetBehavior.BottomSheetCallback mBottomSheetBehaviorCallback = new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_HIDDEN) {
dismissAllowingStateLoss();
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
};
@SuppressLint("RestrictedApi")
@Override
public void setupDialog(@NonNull Dialog dialog, int style) {
super.setupDialog(dialog, style);
View contentView = View.inflate(getContext(), R.layout.fragment_sticker_dialog, null);
dialog.setContentView(contentView);
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) ((View) contentView.getParent()).getLayoutParams();
CoordinatorLayout.Behavior behavior = params.getBehavior();
if (behavior instanceof BottomSheetBehavior) {
((BottomSheetBehavior) behavior).addBottomSheetCallback(mBottomSheetBehaviorCallback);
}
((View) contentView.getParent()).setBackgroundColor(getResources().getColor(android.R.color.transparent));
rvEmoji = contentView.findViewById(R.id.rvEmoji);
GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 4);
rvEmoji.setLayoutManager(gridLayoutManager);
loadRowData();
}
private void loadRowData() {
arrayStickers = new ArrayList<>();
arrayStickers.clear();
try {
arrayStickers.addAll(new ArrayList<>(Arrays.asList(getContext().getAssets().list("joker"))));
rvEmoji.setAdapter(new LabelAdapter(getContext(), "joker/", arrayStickers));
} catch (IOException e) {
e.printStackTrace();
}
}
public class LabelAdapter extends RecyclerView.Adapter<LabelAdapter.ViewHolder> {
private List<String> listImages;
private Context context;
private String folderName;
public LabelAdapter(Context context, String folderName, ArrayList<String> listImages) {
this.listImages = listImages;
this.context = context;
this.folderName = folderName;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_emoji_sticker, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Glide.with(context).asBitmap()
.load("file:///android_asset/" + folderName + listImages.get(position))
.fitCenter().skipMemoryCache(false)
.into(holder.imgSticker);
holder.imgSticker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mStickerListener.onStickerClick(folderName + listImages.get(position));
dismiss();
}
});
}
@Override
public int getItemCount() {
return (null != listImages ? listImages.size() : 0);
}
class ViewHolder extends RecyclerView.ViewHolder {
ImageView imgSticker;
ViewHolder(View itemView) {
super(itemView);
imgSticker = itemView.findViewById(R.id.imgSticker);
}
}
}
以及显示片段的代码。
StickerBSFragment mStickerBSFragment = new StickerBSFragment();
mStickerBSFragment.show(getSupportFragmentManager(), mStickerBSFragment.getTag());
此代码在某些设备中随机崩溃。我试图找出解决方案,但没有关于这个问题的提示。Splunk Mint 库生成的错误日志。
java.lang.IllegalStateException: Fragment already added: StickerBSFragment{fc9d1db} (f54104c4-f862-420b-b30a-3fbd835554cf)}
1 at androidx.fragment.app.FragmentStore.addFragment(FragmentStore.java:67)
2 at androidx.fragment.app.FragmentManager.addFragment(FragmentManager.java:1563)
3 at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:405)
4 at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2167)
5 at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1990)
6 at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1945)
7 at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1847)
8 at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
9 at android.os.Handler.handleCallback(Handler.java:873)
10 at android.os.Handler.dispatchMessage(Handler.java:99)
11 at android.os.Looper.loop(Looper.java:226)
12 at android.app.ActivityThread.main(ActivityThread.java:7191)
13 at java.lang.reflect.Method.invoke(Native Method)
14 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:499)
15 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)
这段代码有什么问题?请更新相同,请帮助解决此问题。
解决方案
推荐阅读
- python - ping ~ 100,000 台服务器,多线程还是多处理更好?
- python - NetworkX中节点的上下游
- css - 自定义 gollum wiki 的布局
- c# - 当 RequiredFieldValidator 存在于 Bootstrap 模式中时,单击事件上的 Asp 按钮不会触发
- xamarin - MainActivity.OnActivityResult(int, Result, Intent)':在 Xamrine 中找不到合适的方法来覆盖
- algorithm - 为什么 BFS 不能将无向图转换为 DAG?
- python - “ValueError:不支持多类格式” roc_auc_score
- javascript - 将多个 SVG 对齐到环绕元素
- java - JavaFX - 后台线程上的 javafx.beans.property 更新
- google-cloud-platform - 将设备从一个注册表复制到另一个 Google IoT Core