将复选框添加到导航抽屉ListView时出错

我正在尝试将自定义导航抽屉添加到我的Android应用程序中。 我需要的是添加一个包含图标,名称和复选框的列表视图。

目前,我能够添加图标和名称。

这是我在NavigationDrawerFragment.java onCreateView

  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mDrawerListView = (ListView) inflater.inflate( R.layout.fragment_navigation_drawer, container, false); mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { selectItem(position); } }); final TypedArray typedArray = getResources().obtainTypedArray(R.array.sections_icons); mDrawerListView.setAdapter(new ArrayAdapter( getActionBar().getThemedContext(), android.R.layout.simple_list_item_activated_1, android.R.id.text1, getResources().getStringArray(R.array.sections) ) { @Override public View getView(int position, View convertView, ViewGroup parent) { View v = super.getView(position, convertView, parent); int resourceId = typedArray.getResourceId(position, 0); Drawable drawable = getResources().getDrawable(resourceId); ((TextView) v).setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null); return v; } }); mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); return mDrawerListView; } 

但是,我无法在导航抽屉中添加复选框。 所以,我按照这个 ,我尝试通过添加mDrawerList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);添加复选框mDrawerList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

这给了我以下错误。

 05-05 11:24:49.537 3640-3640/com.myayubo E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.myayubo, PID: 3640 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myayubo/com.myayubo.MainActivity}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) at android.os.Handler.dispatchMessage(Handler.java:110) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:5299) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at com.myayubo.MainActivity.onCreate(MainActivity.java:67) at android.app.Activity.performCreate(Activity.java:5264) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)            at android.app.ActivityThread.access$800(ActivityThread.java:151)            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)            at android.os.Handler.dispatchMessage(Handler.java:110)            at android.os.Looper.loop(Looper.java:193)            at android.app.ActivityThread.main(ActivityThread.java:5299)            at java.lang.reflect.Method.invokeNative(Native Method)            at java.lang.reflect.Method.invoke(Method.java:515)            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)            at dalvik.system.NativeStart.main(Native Method) 

有人请告诉我如何在我的代码中添加复选框。

提前致谢。 🙂

你应该这样做:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_navigation_drawer, container, false); ListView mDrawerListView = (ListView) rootView.findViewById(R.id.listView); mDrawerList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); // Other stuff return rootView; } 

编辑1:

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_navigation_drawer, container, false); ListView mDrawerListView = (ListView) rootView.findViewById(R.id.listView); mDrawerList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { selectItem(position); } }); final TypedArray typedArray = getResources().obtainTypedArray(R.array.sections_icons); mDrawerListView.setAdapter(new ArrayAdapter( getActionBar().getThemedContext(), android.R.layout.simple_list_item_activated_1, android.R.id.text1, getResources().getStringArray(R.array.sections) ) { @Override public View getView(int position, View convertView, ViewGroup parent) { View v = super.getView(position, convertView, parent); int resourceId = typedArray.getResourceId(position, 0); Drawable drawable = getResources().getDrawable(resourceId); ((TextView) v).setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null); return v; } }); mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); return rootView; } 

你对ListView的绑定做错了。

希望这会有意义。