【发布时间】:2019-10-08 22:41:15
【问题描述】:
升级 Android 10 Q 后,我的 dialogFragment 无法正常工作,我也将 android 项目转换为“AdroidX”,但问题仍然相同。
我是 xamarin 开发人员,所以请帮助我理解这个问题。
请检查错误:
2019-09-27 19:01:30.551 2177-2218/? E/memtrack: Couldn't load memtrack module
2019-09-27 19:01:33.135 6797-6797/com.anotherroundapps.apps.kegid E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.anotherroundapps.apps.kegid, PID: 6797
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.view.View$DeclaredOnClickListener.onClick(View.java:5994)
at android.view.View.performClick(View.java:7140)
at android.view.View.performClickInternal(View.java:7117)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27351)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:5989)
at android.view.View.performClick(View.java:7140)
at android.view.View.performClickInternal(View.java:7117)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27351)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.IllegalStateException: Fragment com.anotherroundapps.apps.kegid.ManifestBuilder.EffectiveDateManagerFragment must be a public static class to be properly recreated from instance state.
at androidx.fragment.app.BackStackRecord.doAddOp(BackStackRecord.java:400)
at androidx.fragment.app.BackStackRecord.add(BackStackRecord.java:379)
at androidx.fragment.app.DialogFragment.show(DialogFragment.java:143)
at com.anotherroundapps.apps.kegid.ManifestBuilder.showEffectiveDateDialog(ManifestBuilder.java:540)
at com.anotherroundapps.apps.kegid.ManifestBuilder.itemClick(ManifestBuilder.java:275)
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:5989)
at android.view.View.performClick(View.java:7140)
at android.view.View.performClickInternal(View.java:7117)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27351)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
2019-09-27 19:01:33.147 2177-2201/? E/system_server: Invalid ID 0x00000000.
2019-09-27 19:01:33.193 1812-2126/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
2019-09-27 19:01:33.196 1812-2284/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
2019-09-27 19:01:35.611 2177-5427/? E/InputDispatcher: Window handle Window{bf1e32f u0 Application Error: com.anotherroundapps.apps.kegid} has no registered input channel
2019-09-27 19:01:35.669 2177-4730/? E/InputDispatcher: Window handle Window{bf1e32f u0 Application Error: com.anotherroundapps.apps.kegid} has no registered input channel
2019-09-27 19:01:35.738 2177-2285/? E/InputDispatcher: channel '94f2618 com.anotherroundapps.apps.kegid/com.anotherroundapps.apps.kegid.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
2019-09-27 19:01:35.739 2177-2285/? E/InputDispatcher: channel 'f095afe com.anotherroundapps.apps.kegid/com.anotherroundapps.apps.kegid.ManifestBuilder (server)' ~ Channel is unrecoverably broken and will be disposed!
2019-09-27 19:01:37.342 2735-2735/? E/BeaconBle: Missing BluetoothAdapter
2019-09-27 19:01:37.393 2735-2735/? E/BeaconBle: Scan couldn't start for Places
2019-09-27 19:01:50.830 1935-1935/? E/netmgr: Failed to open QEMU pipe 'qemud:network': Invalid argument
2019-09-27 19:01:50.831 1935-1935/? E/netmgr: WifiForwarder unable to open QEMU pipe: Invalid argument
2019-09-27 19:02:50.865 1935-1935/? E/netmgr: Failed to open QEMU pipe 'qemud:network': Invalid argument
2019-09-27 19:02:50.865 1935-1935/? E/netmgr: WifiForwarder unable to open QEMU pipe: Invalid argument
2019-09-27 19:03:09.797 2177-2218/? E/memtrack: Couldn't load memtrack module
2019-09-27 19:03:09.810 2177-2218/? E/memtrack: Couldn't load memtrack module
2019-09-27 19:03:09.812 2177-2218/? E/memtrack: Couldn't load memtrack module
2019-09-27 19:03:50.928 1935-1935/? E/netmgr: Failed to open QEMU pipe 'qemud:network': Invalid argument
2019-09-27 19:03:50.929 1935-1935/? E/netmgr: WifiForwarder unable to open QEMU pipe: Invalid argument
2019-09-27 19:03:56.639 2735-6578/? E/WakeLock: GCM_HB_ALARM release without a matched acquire!
2019-09-27 19:03:56.645 2735-6578/? E/WakeLock: GCM_CONN_ALARM release without a matched acquire!
2019-09-27 19:03:56.893 2177-2218/? E/memtrack: Couldn't load memtrack module
2019-09-27 19:03:56.897 2177-2218/? E/memtrack: Couldn't load memtrack module
2019-09-27 19:04:02.386 2735-6917/? E/WakeLock: GCM_CONN_ALARM release without a matched acquire!
2019-09-27 19:04:45.446 2177-2218/? E/memtrack: Couldn't load memtrack module
-
我已经尝试过使用 AndroidX 和一些 googles artical 但无法获得太多帮助
公共无效 showEffectiveDateDialog() { DialogFragment newFragment = new EffectiveDateManagerFragment(); newFragment.show(getFragmentManager(), "datePicker"); }
public class EffectiveDateManagerFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { DateTime currentEffectiveDate = mNewManifest.getEffectiveDate(); // prompt use scan date or select another date ArrayList<CharSequence> selections = new ArrayList<CharSequence>(); if (currentEffectiveDate != null) selections.add(Html.fromHtml(String.format("Current selection: <b>%s</b>", currentEffectiveDate.toString(KegIdApplication.DATETIME_DISPLAY_FORMAT)))); else selections.add(Html.fromHtml(String.format("Current selection: <b>%s</b>", getString(R.string.label_use_scan_date)))); selections.add(getString(R.string.label_use_scan_date)); selections.add(getString(R.string.label_choose_a_date)); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.label_effectivedate).setItems(selections.toArray(new CharSequence[selections.size()]), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case 0: //leave as is dialog.dismiss(); break; case 1: // use scan date, clear effective date mNewManifest.setEffectiveDate(null); mEffectiveDateText.setText(R.string.label_use_scan_date); break; case 2: // choose an effectivedate dialog.dismiss(); DialogFragment newFragment = new DateTimePickerFragment(mNewManifest.getEffectiveDate()); newFragment.show(getFragmentManager(), "datePicker"); break; default: //cancel; dialog.dismiss(); break; } } }); //builder.setMessage("Choose the effective date for these kegs"); return builder.create(); } }
我必须打开自定义对话框
【问题讨论】:
-
Fragment com.anotherroundapps.apps.kegid.ManifestBuilder.EffectiveDateManagerFragment must be a public static class to be properly recreated from instance state.-- 你的EffectiveDateManagerFragment在EffectiveDateManagerFragment.java文件中吗?如果没有,请将其移到那里,使其成为常规 Java 类。
标签: android-dialogfragment android-10.0