我正在尝试使用 ArrayAdapter 和 spinner.setAdapter(adapter) 更改微调器中的项目
此代码在选择侧边栏项目时运行,更改微调器中的值
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mDrawerToggle.onOptionsItemSelected(item)) {
String Tag = "Navigation drawer";
Log.v(Tag, "Drawer item toggled");
Spinner spinner = (Spinner) getView().findViewById(R.id.inputSpinner);
//Get view must be used in order to use findViewById inside a fragment
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity().getApplicationContext(), //getActivity gets the correct context for me
R.array.area_units_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //Tells the adapter what layout to use
spinner.setAdapter(adapter);
return true;
}
return super.onOptionsItemSelected(item);
}
抛出的错误如下
06-21 19:44:09.688 4715-4715/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.anapp.tpb.sidebarproject, PID: 4715
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)' on a null object reference
at com.anapp.tpb.sidebarproject.NavigationDrawerFragment.onOptionsItemSelected(NavigationDrawerFragment.java:272)
at android.app.Fragment.performOptionsItemSelected(Fragment.java:2159)
at android.app.FragmentManagerImpl.dispatchOptionsItemSelected(FragmentManager.java:1988)
at android.app.Activity.onMenuItemSelected(Activity.java:2888)
at com.android.internal.widget.ToolbarWidgetWrapper$1.onClick(ToolbarWidgetWrapper.java:182)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
--------- beginning of system
我已经阅读了其他人的 NullPointer 异常,我可以看到它来自行 Spinner spinner = (Spinner) getView().findViewById(R.id.inputSpinner);
但我不知道为什么。微调器“inputSpinner”存在。
如果这个问题有明显的答案,我深表歉意。我刚刚完成 GCSE 考试,在此之前我只真正使用过 Python。 Java 对我来说相对较新,所以我正在制作一个简单的单位转换器应用程序。
最佳答案
尝试更改 Spinner spinner = (Spinner) getView().findViewById(R.id.inputSpinner);
至
Spinner spinner = (Spinner) findViewById(R.id.inputSpinner);
因为您使用 (Spinner)
将其转换为 Spinner View 并且知道 ViewID,所以无需调用 getView()
然后使用 ID。
不确定这是否能解决问题。
此外,仅使用 getApplicationContext()
,同样无需从 Activity 获取应用程序上下文。独立使用 getActivity()
(或 getApplicationContext()
)。
PS:Google Docs是惊人的!使用它们!
关于java - spinner.setAdapter(适配器) 导致 "A resource was acquired at attached stack trace but never released"错误并应用程序强制关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30968653/