2014-02-13 72 views
0

我正在遵循導航抽屜實施指南。該導航具有導航抽屜中每個項目的圖標,我正在對其進行編輯,以便它沒有每個項目的圖標。結果我打破了一些東西,現在FC在適配器上。我得到的錯誤是:導航抽屜FC在適配器

02-13 02:31:29.577 3921-3921/com.beerportfolio.beerportfoliopro E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.beerportfolio.beerportfoliopro/com.beerportfolio.beerportfoliopro.MainDrawer2}: java.lang.NullPointerException 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2517) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2574) 
      at android.app.ActivityThread.access$600(ActivityThread.java:162) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1413) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:158) 
      at android.app.ActivityThread.main(ActivityThread.java:5789) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:525) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:843) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
      at com.beerportfolio.beerportfoliopro.MainDrawer2.onCreate(MainDrawer2.java:71) 
      at android.app.Activity.performCreate(Activity.java:5195) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2473) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2574) 
            at android.app.ActivityThread.access$600(ActivityThread.java:162) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1413) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:158) 
            at android.app.ActivityThread.main(ActivityThread.java:5789) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:525) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:843) 
            at dalvik.system.NativeStart.main(Native Method) 

MY MainDrawer2代碼:

public class MainDrawer2 extends Activity { 

    private DrawerLayout mDrawerLayout; 
    private ListView mDrawerList; 
    private ActionBarDrawerToggle mDrawerToggle; 

    // nav drawer title 
    private CharSequence mDrawerTitle; 

    // used to store app title 
    private CharSequence mTitle; 

    // slide menu items 
    private String[] navMenuTitles; 
    private TypedArray navMenuIcons; 

    private ArrayList<NavDrawerItem> navDrawerItems; 
    private NavDrawerListAdapter adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mTitle = mDrawerTitle = getTitle(); 

     // load slide menu items 
     navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items); 

     // nav drawer icons from resources 


     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) findViewById(R.id.drawer); 

     navDrawerItems = new ArrayList<NavDrawerItem>(); 

     // adding nav drawer items to array 
     // Home 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[0])); 
     // Find People 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[1])); 


     // setting the nav drawer list adapter 
     adapter = new NavDrawerListAdapter(getApplicationContext(), 
       navDrawerItems); 
     mDrawerList.setAdapter(adapter); 

     // enabling action bar app icon and behaving it as toggle button 
     getActionBar().setDisplayHomeAsUpEnabled(true); 


     //getActionBar().setHomeButtonEnabled(true); 

     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
       R.drawable.ic_drawer, //nav menu toggle icon 
       R.string.app_name, // nav drawer open - description for accessibility 
       R.string.app_name // nav drawer close - description for accessibility 
     ){ 
      public void onDrawerClosed(View view) { 
       getActionBar().setTitle(mTitle); 
       // calling onPrepareOptionsMenu() to show action bar icons 
       invalidateOptionsMenu(); 
      } 

      public void onDrawerOpened(View drawerView) { 
       getActionBar().setTitle(mDrawerTitle); 
       // calling onPrepareOptionsMenu() to hide action bar icons 
       invalidateOptionsMenu(); 
      } 
     }; 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 

     if (savedInstanceState == null) { 
      // on first time display view for first nav item 
      displayView(0); 
     } 
    } 

    /** 
    * Diplaying fragment view for selected nav drawer list item 
    * */ 
    private void displayView(int position) { 
     // update the main content by replacing fragments 
     Fragment fragment = null; 
     switch (position) { 
      case 0: 
       fragment = new StatisticsPage(); 
       break; 
      case 1: 
       fragment = new Discover(); 
       break; 

      default: 
       break; 
     } 

     if (fragment != null) { 
      FragmentManager fragmentManager = getFragmentManager(); 
      fragmentManager.beginTransaction() 
        .replace(R.id.main, fragment).commit(); 

      // update selected item and title, then close the drawer 
      mDrawerList.setItemChecked(position, true); 
      mDrawerList.setSelection(position); 
      setTitle(navMenuTitles[position]); 
      mDrawerLayout.closeDrawer(mDrawerList); 
     } else { 
      // error in creating fragment 
      Log.e("MainActivity", "Error in creating fragment"); 
     } 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // toggle nav drawer on selecting action bar app icon/title 
     if (mDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 
     // Handle action bar actions click 
     switch (item.getItemId()) { 
      case R.id.action_settings: 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

    /*** 
    * Called when invalidateOptionsMenu() is triggered 
    */ 
    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     // if nav drawer is opened, hide the action items 
     boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); 
     menu.findItem(R.id.action_settings).setVisible(!drawerOpen); 
     return super.onPrepareOptionsMenu(menu); 
    } 

    @Override 
    public void setTitle(CharSequence title) { 
     mTitle = title; 
     getActionBar().setTitle(mTitle); 
    } 

    /** 
    * When using the ActionBarDrawerToggle, you must call it during 
    * onPostCreate() and onConfigurationChanged()... 
    */ 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     // Sync the toggle state after onRestoreInstanceState has occurred. 
     mDrawerToggle.syncState(); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     // Pass any configuration change to the drawer toggls 
     mDrawerToggle.onConfigurationChanged(newConfig); 
    } 
} 

NavDrawerListAdapter是:

public class NavDrawerListAdapter extends BaseAdapter { 

    private Context context; 
    private ArrayList<NavDrawerItem> navDrawerItems; 

    public NavDrawerListAdapter(Context context, ArrayList<NavDrawerItem> navDrawerItems){ 
     this.context = context; 
     this.navDrawerItems = navDrawerItems; 
    } 

    @Override 
    public int getCount() { 
     return navDrawerItems.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return navDrawerItems.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      LayoutInflater mInflater = (LayoutInflater) 
        context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
      convertView = mInflater.inflate(R.layout.drawer_list_item, null); 
     } 


     TextView txtTitle = (TextView) convertView.findViewById(R.id.title); 

     txtTitle.setText(navDrawerItems.get(position).getTitle()); 

     // displaying count 
     // check whether it set visible or not 
     if(navDrawerItems.get(position).getCounterVisibility()){ 
      //txtCount.setText(navDrawerItems.get(position).getCount()); 
     }else{ 
      // hide the counter view 
      //txtCount.setVisibility(View.GONE); 
     } 

     return convertView; 
    } 

} 

NavDrawerItem是:

public class NavDrawerItem { 

    private String title; 
    private int icon; 
    private String count = "0"; 
    // boolean to set visiblity of the counter 
    private boolean isCounterVisible = false; 

    public NavDrawerItem(){} 

    public NavDrawerItem(String title){ 
     this.title = title; 
    } 

    public NavDrawerItem(String title, int icon, boolean isCounterVisible){ 
     this.title = title; 
     this.isCounterVisible = isCounterVisible; 
     this.count = count; 
    } 

    public String getTitle(){ 
     return this.title; 
    } 

    public int getIcon(){ 
     return this.icon; 
    } 

    public String getCount(){ 
     return this.count; 
    } 

    public boolean getCounterVisibility(){ 
     return this.isCounterVisible; 
    } 

    public void setTitle(String title){ 
     this.title = title; 
    } 

    public void setIcon(int icon){ 
     this.icon = icon; 
    } 

    public void setCount(String count){ 
     this.count = count; 
    } 

    public void setCounterVisibility(boolean isCounterVisible){ 
     this.isCounterVisible = isCounterVisible; 
    } 
} 

更新:

71行是這樣的:

mDrawerList.setAdapter(adapter); 
+1

這是什麼行:MainDrawer2.java:* 71 *?這就是拋出異常的地方 – brwngrldev

+0

mDrawerList.setAdapter(adapter); – Mike

+0

你確定這是你的listview的id:'R.id.drawer'?看起來像列表視圖爲空 – brwngrldev

回答

1

仔細檢查您的佈局文件,貌似參考ListView控件是回來空。

+0

現在,它的一切工作,似乎我的onCLick打開片段不註冊。如果您的興趣將要發佈另一個問題。我會把鏈接放在這裏,當它是生活 – Mike

+0

這裏是我的另一個問題與片段不加載:http://stackoverflow.com/questions/21760094/onclick-for-navigationdrawer-not-loading-new-fragments – Mike