2016-05-05 22 views
0

我正在嘗試向我的android應用程序添加自定義導航抽屜。我需要的是添加一個包含圖標,名稱和複選框的列表視圖。將複選框添加到導航抽屜ListView時出錯

目前,我能夠添加圖標和名稱。

這是我在onCreateViewNavigationDrawerFragment.java

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<String>(
       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; 
    } 

但是,我不能複選框添加到我的抽屜式導航欄。 所以,我跟着this,我試圖添加複選框,加入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) 

有人請告訴我如何添加複選框到我的代碼。

在此先感謝。 :)

回答

1

你應該做的是這樣的:

@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<String>(
       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綁定做錯了。

希望這會有道理。

+0

你的意思是我需要刪除onCreateView中的其他代碼並添加它? –

+0

@QualityProducts,你應該像我的代碼綁定列表視圖 –

+0

我真的很抱歉問這個問題。我不明白它,因爲我是Android新手。你可以更具描述性嗎?你能得到我的答案並編輯它嗎?謝謝。 :) –