如何解决从 sdk 28 更新到 sdk29 后,Android Spinner 对话框弹出窗口不起作用
我有一个带有弹出对话框微调器的应用程序,该应用程序曾经可以在 SDK 28 上正常运行,没有问题。 现在我已经迁移到 SDK 29 AndroidX 并且弹出窗口不再工作。
Spinner_LockSetting = (Spinner) findViewById(R.id.Spinner_LockSetting);
SettingValueAdapter adapter = new SettingValueAdapter(this,android.R.layout.simple_spinner_dropdown_item,SettingValue.values());
Spinner_LockSetting.setAdapter(adapter);
Spinner_LockSetting.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0,View arg1,int arg2,long arg3) {
// do something
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
布局 XML
<Spinner
android:id="@+id/Spinner_LockSetting"
android:layout_width="100dp"
android:layout_height="50dp"
android:prompt="@string/app_name"
android:spinnerMode="dialog" />
当我单击微调器时,出现此异常:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
at com.android.internal.app.WindowDecorActionBar.getDecorToolbar(WindowDecorActionBar.java:251)
at com.android.internal.app.WindowDecorActionBar.init(WindowDecorActionBar.java:196)
at com.android.internal.app.WindowDecorActionBar.<init>(WindowDecorActionBar.java:180)
at android.app.Dialog.show(Dialog.java:437)
at androidx.appcompat.widget.AppCompatSpinner$DialogPopup.show(AppCompatSpinner.java:908)
at androidx.appcompat.widget.AppCompatSpinner.showPopup(AppCompatSpinner.java:608)
at androidx.appcompat.widget.AppCompatSpinner.performClick(AppCompatSpinner.java:452)
at android.view.View.performClickInternal(View.java:8137)
at android.view.View.access$3700(View.java:888)
at android.view.View$PerformClick.run(View.java:30250)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:596)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
当我将 spinnermode XML 设置为下拉菜单时,它可以正常工作。 我不知道 NullPointerException 指的是哪里,我是否需要对 AndroidX 与 SDK28 中的对话框做更多处理?
我做了一个干净的活动来测试,似乎问题与主题有关。
android:theme="@android:style/Theme.Holo"
解决方法
如果您想将微调器显示为弹出对话框,试试这个
android:spinnerMode="dialog"
对于下拉
android:spinnerMode="dropdown"
如果他们不起作用,也添加这一行
style="@android:style/Widget.Spinner.DropDown"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。