简体   繁体   English

中的 BottomSheetDialogFragment 问题 - Android

[英]Issue with the BottomSheetDialogFragment in - Android

I was just upgrading the old android project and everything I have done properly and at the last I am just getting below error :我只是在升级旧的 android 项目和我已经正确完成的所有事情,最后我只是得到以下错误:

   2022-07-21 15:19:06.548 19455-19455/com.brian.skyazul E/USNET: USNET: appName: com.packagename
2022-07-21 15:19:48.290 19455-19455/com.brian.skyazul E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.packagename, PID: 19455
    java.lang.IllegalStateException: Fragment com.brian.skyazul.fragment.ManualsFragment.BottomSheetFilterDialog must be a public static class to be  properly recreated from instance state.
        at androidx.fragment.app.FragmentTransaction.doAddOp(FragmentTransaction.java:249)
        at androidx.fragment.app.BackStackRecord.doAddOp(BackStackRecord.java:183)
        at androidx.fragment.app.FragmentTransaction.add(FragmentTransaction.java:171)
        at androidx.fragment.app.DialogFragment.show(DialogFragment.java:259)
        at com.brian.skyazul.fragment.ManualsFragment$1.onClick(ManualsFragment.java:80)
        at android.view.View.performClick(View.java:7792)
        at android.view.View.performClickInternal(View.java:7769)
        at android.view.View.access$3800(View.java:910)
        at android.view.View$PerformClick.run(View.java:30218)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loopOnce(Looper.java:226)
        at android.os.Looper.loop(Looper.java:313)
        at android.app.ActivityThread.main(ActivityThread.java:8663)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)

There is a code as below for BottomSheetFragment : BottomSheetFragment 有如下代码:

mFilterDialog = new BottomSheetFilterDialog();
mFilterDialog.show(getActivity().getSupportFragmentManager(), mFilterDialog.getTag());

Error is pointing at below line :错误指向以下行:

mFilterDialog.show(getActivity().getSupportFragmentManager(), mFilterDialog.getTag()); mFilterDialog.show(getActivity().getSupportFragmentManager(), mFilterDialog.getTag());

More Implementation is here :更多实施在这里:

@SuppressLint("ValidFragment")
public class BottomSheetFilterDialog extends BottomSheetDialogFragment {
    private RecyclerView mRecFilter;
    private Button btnClear;
    private FilterAdapter mFilterAdapter;
    @SuppressLint("RestrictedApi")
    @Override
    public void setupDialog(final Dialog dialog, int style) {
        super.setupDialog(dialog, style);
        View contentView = View.inflate(getContext(), R.layout.fragment_bottom_sheet_filters_option, null);
        dialog.setContentView(contentView);
        mRecFilter = (RecyclerView) contentView.findViewById(R.id.rec_filter);
        btnClear = (Button) contentView.findViewById(R.id.fragment_bottom_sheet_btn_clear);
        mFilterAdapter = new FilterAdapter();
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
        mRecFilter.addItemDecoration(new DividerDecoration(getActivity()));
        mRecFilter.setLayoutManager(mLayoutManager);
        mRecFilter.setItemAnimator(new DefaultItemAnimator());
        mFilterAdapter.addAll(lstManualHeaderCategoryName);
        mRecFilter.setAdapter(mFilterAdapter);

        btnClear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mCategoryAdapter.clear();
                mCategoryAdapter.addAll(model);
                getDialog().dismiss();
            }
        });

        mRecFilter.addOnItemTouchListener(
                new CommonRecyclerAdapter(new OnItemClickListener() {
                    @Override
                    public void onItemClick(View view, int position) {
                        mCategoryAdapter.clear();
                        String keyName = null;
                        try {
                            keyName = namearray.get(position).toString();
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                        filterModel = new ArrayList<ManualViewTypeModel>();
                            try {
                                JSONObject jsonObject = (JSONObject) (mFilterAdapter.getItem(position));
                                ManualViewTypeModel modelHeader = new ManualViewTypeModel();
                                modelHeader.setCategoryId(jsonObject.getString("category_id"));
                                modelHeader.setId(namearray.get(position).toString());
                                modelHeader.setCategoryName(jsonObject.getString("category_name"));
                                modelHeader.setRowViewItemtype(ManualViewTypeModel.HEADER);
                                modelHeader.setCategoryImage(jsonObject.getString("category_image"));
                                filterModel.add(modelHeader);
                                for (int j = 0; j < jsonObject.getJSONArray("manuals").length(); j++) {
                                    ManualViewTypeModel modelManual = new ManualViewTypeModel();
                                    modelManual.setCategoryId(jsonObject.getString("category_id"));
                                    modelManual.setId(namearray.get(position).toString());
                                    modelManual.setCategoryName(jsonObject.getString("category_name"));
                                    modelManual.setRowViewItemtype(ManualViewTypeModel.ROWITEM);
                                    Manual manual = new Manual();
                                    manual.setManualFile(jsonObject.getJSONArray("manuals").getJSONObject(j).getString("manual_file"));
                                    manual.setManualName(jsonObject.getJSONArray("manuals").getJSONObject(j).getString("manual_name"));
                                    modelManual.setManualList(manual);
                                    filterModel.add(modelManual);
                                }
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        mCategoryAdapter.addAll(filterModel);
                        getDialog().dismiss();

                    }
                }) {
                    @Override
                    protected int getViewIdToSwitch() {
                        return 0;
                    }
                }
        );
    }
}

What might causing the issue?什么可能导致问题? Thanks.谢谢。

As of this answer fragments have some conditions so that os could recreate them.截至这个答案片段有一些条件,以便操作系统可以重新创建它们。 One of them is that your fragment should not be an inner class.其中之一是您的片段不应该是内部类。 Because this makes your fragment creation dependent on its outer class.因为这使您的片段创建依赖于其外部类。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 BottomSheetDialogFragment 点击打开另一个BottomSheetDialogFragment android - BottomSheetDialogFragment click to open another BottomSheetDialogFragment android Android BottomSheetDialogFragment 闪烁 - Android BottomSheetDialogFragment blinking 如何在 Android 中为 BottomSheetDialogFragment 设置动画? - How to animate BottomSheetDialogFragment in Android? BottomSheetDialogFragment 内的 LazyColumn 滚动问题 - Scroll issue with LazyColumn inside BottomSheetDialogFragment Android BottomSheetDialogFragment状态更改侦听器 - Android BottomSheetDialogFragment state change listener Android BottomSheetDialogFragment 没有完全展开 - Android BottomSheetDialogFragment does not expand completely Android BottomSheetDialogFragment 隐藏在键盘后面 - Android BottomSheetDialogFragment hides behind keyboard Android 自定义键盘在 BottomSheetDialogFragment 中不起作用 - Android Custom Keyboard Not Working in BottomSheetDialogFragment Android - 在键盘上方显示 BottomSheetDialogFragment - Android - Show BottomSheetDialogFragment above Keyboard BottomSheetDialogFragment动画在android软键上(返回,主页) - BottomSheetDialogFragment animates over android softkeys (back, home)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM