2015-10-13 154 views
0

我在Android Studio創建了導航抽屜活動,但我的主題沒有ActionBar(我使用的是由於設計而使用的Toolbar小部件),它拒絕工作,在這裏給我一個java.lang.NullPointerException點:Android導航抽屜沒有操作欄

mDrawerListView.setAdapter(new ArrayAdapter<String>(
      getActionBar().getThemedContext(), 
      android.R.layout.simple_list_item_activated_1, 
      android.R.id.text1, 
      new String[]{ 
        getString(R.string.title_section1), 
        getString(R.string.title_section2), 
        getString(R.string.title_section3), 
      })); 

所以,我想與其他方面的getter函數代替getActionBar().getThemedContext(),但沒有得到sucess ...

編輯:根據要求: 堆棧跟蹤:

10-13 15:15:16.054 15849-15849/? E/AndroidRuntime: FATAL EXCEPTION: main 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{br.net.beno.supercarrinho/br.net.beno.supercarrinho.AtividadePrincipal}: android.view.InflateException: Binary XML file line #19: Error inflating class fragment 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2255) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.ActivityThread.access$700(ActivityThread.java:157) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:176) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5319) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at java.lang.reflect.Method.invokeNative(Native Method) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:511) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at dalvik.system.NativeStart.main(Native Method) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime: Caused by: android.view.InflateException: Binary XML file line #19: Error inflating class fragment 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.view.LayoutInflater.rInflate(LayoutInflater.java:752) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:255) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at br.net.beno.supercarrinho.AtividadePrincipal.onCreate(AtividadePrincipal.java:52) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.Activity.performCreate(Activity.java:5326) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2218) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.ActivityThread.access$700(ActivityThread.java:157)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:99)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:176)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5319)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at java.lang.reflect.Method.invokeNative(Native Method)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:511)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at dalvik.system.NativeStart.main(Native Method)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime: Caused by: java.lang.NullPointerException 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at br.net.beno.supercarrinho.NavigationDrawerFragment.onCreateView(NavigationDrawerFragment.java:100) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:995) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1185) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1287) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2243) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:111) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:278) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:31) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:78) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:686) 
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.view.LayoutInflater.inflate(LayoutInflater.java:495)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.view.LayoutInflater.inflate(LayoutInflater.java:397)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.view.LayoutInflater.inflate(LayoutInflater.java:353)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:255)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at br.net.beno.supercarrinho.AtividadePrincipal.onCreate(AtividadePrincipal.java:52)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.Activity.performCreate(Activity.java:5326)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2218)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.ActivityThread.access$700(ActivityThread.java:157)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:99)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:176)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5319)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at java.lang.reflect.Method.invokeNative(Native Method)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:511)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)  
10-13 15:15:16.054 15849-15849/? E/AndroidRuntime:  at dalvik.system.NativeStart.main(Native Method)  

NavigationDrawerFragment.java:

package br.net.beno.supercarrinho; 

import android.support.v7.app.AppCompatActivity; 
import android.app.Activity; 
import android.support.v7.app.ActionBar; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.ActionBarDrawerToggle; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.content.SharedPreferences; 
import android.content.res.Configuration; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.support.v7.widget.Toolbar; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

/** 
* Fragment used for managing interactions for and presentation of a navigation drawer. 
* See the <a href="https://developer.android.com/design/patterns/navigation-drawer.html#Interaction"> 
* design guidelines</a> for a complete explanation of the behaviors implemented here. 
*/ 
public class NavigationDrawerFragment extends Fragment { 

    /** 
    * Remember the position of the selected item. 
    */ 
    private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position"; 

    /** 
    * Per the design guidelines, you should show the drawer on launch until the user manually 
    * expands it. This shared preference tracks this. 
    */ 
    private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned"; 

    /** 
    * A pointer to the current callbacks instance (the Activity). 
    */ 
    private NavigationDrawerCallbacks mCallbacks; 

    /** 
    * Helper component that ties the action bar to the navigation drawer. 
    */ 
    private ActionBarDrawerToggle mDrawerToggle; 

    private DrawerLayout mDrawerLayout; 
    private ListView mDrawerListView; 
    private View mFragmentContainerView; 

    private int mCurrentSelectedPosition = 0; 
    private boolean mFromSavedInstanceState; 
    private boolean mUserLearnedDrawer; 

    public NavigationDrawerFragment() { 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Read in the flag indicating whether or not the user has demonstrated awareness of the 
     // drawer. See PREF_USER_LEARNED_DRAWER for details. 
     SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
     mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false); 

     if (savedInstanceState != null) { 
      mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION); 
      mFromSavedInstanceState = true; 
     } 

     // Select either the default item (0) or the last selected item. 
     selectItem(mCurrentSelectedPosition); 

    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     // Indicate that this fragment would like to influence the set of actions in the action bar. 
     setHasOptionsMenu(true); 
    } 

    @Override 
    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); 
      } 
     }); 
     mDrawerListView.setAdapter(new ArrayAdapter<String>(
       getActionBar().getThemedContext(), 
       android.R.layout.simple_list_item_activated_1, 
       android.R.id.text1, 
       new String[]{ 
         getString(R.string.title_section1), 
         getString(R.string.title_section2), 
         getString(R.string.title_section3), 
       })); 
     mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); 
     return mDrawerListView; 
    } 

    public boolean isDrawerOpen() { 
     return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(mFragmentContainerView); 
    } 

    /** 
    * Users of this fragment must call this method to set up the navigation drawer interactions. 
    * 
    * @param fragmentId The android:id of this fragment in its activity's layout. 
    * @param drawerLayout The DrawerLayout containing this fragment's UI. 
    */ 
    public void setUp(int fragmentId, DrawerLayout drawerLayout) { 
     mFragmentContainerView = getActivity().findViewById(fragmentId); 
     mDrawerLayout = drawerLayout; 

     // set a custom shadow that overlays the main content when the drawer opens 
     mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 

     // set up the drawer's list view with items and click listener 

     ActionBar actionBar = getActionBar(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setHomeButtonEnabled(true); 

     // ActionBarDrawerToggle ties together the the proper interactions 
     // between the navigation drawer and the action bar app icon. 
     mDrawerToggle = new ActionBarDrawerToggle(
       getActivity(),     /* host Activity */ 
       mDrawerLayout,     /* DrawerLayout object */ 
       R.drawable.ic_drawer,    /* nav drawer image to replace 'Up' caret */ 
       R.string.navigation_drawer_open, /* "open drawer" description for accessibility */ 
       R.string.navigation_drawer_close /* "close drawer" description for accessibility */ 
     ) { 
      @Override 
      public void onDrawerClosed(View drawerView) { 
       super.onDrawerClosed(drawerView); 
       if (!isAdded()) { 
        return; 
       } 

       getActivity().supportInvalidateOptionsMenu(); // calls onPrepareOptionsMenu() 
      } 

      @Override 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       if (!isAdded()) { 
        return; 
       } 

       if (!mUserLearnedDrawer) { 
        // The user manually opened the drawer; store this flag to prevent auto-showing 
        // the navigation drawer automatically in the future. 
        mUserLearnedDrawer = true; 
        SharedPreferences sp = PreferenceManager 
          .getDefaultSharedPreferences(getActivity()); 
        sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply(); 
       } 

       getActivity().supportInvalidateOptionsMenu(); // calls onPrepareOptionsMenu() 
      } 
     }; 

     // If the user hasn't 'learned' about the drawer, open it to introduce them to the drawer, 
     // per the navigation drawer design guidelines. 
     if (!mUserLearnedDrawer && !mFromSavedInstanceState) { 
      mDrawerLayout.openDrawer(mFragmentContainerView); 
     } 

     // Defer code dependent on restoration of previous instance state. 
     mDrawerLayout.post(new Runnable() { 
      @Override 
      public void run() { 
       mDrawerToggle.syncState(); 
      } 
     }); 

     mDrawerLayout.setDrawerListener(mDrawerToggle); 
    } 

    private void selectItem(int position) { 
     mCurrentSelectedPosition = position; 
     if (mDrawerListView != null) { 
      mDrawerListView.setItemChecked(position, true); 
     } 
     if (mDrawerLayout != null) { 
      mDrawerLayout.closeDrawer(mFragmentContainerView); 
     } 
     if (mCallbacks != null) { 
      mCallbacks.onNavigationDrawerItemSelected(position); 
     } 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      mCallbacks = (NavigationDrawerCallbacks) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException("Activity must implement NavigationDrawerCallbacks."); 
     } 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
     mCallbacks = null; 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     // Forward the new configuration the drawer toggle component. 
     mDrawerToggle.onConfigurationChanged(newConfig); 
    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     // If the drawer is open, show the global app actions in the action bar. See also 
     // showGlobalContextActionBar, which controls the top-left area of the action bar. 
     if (mDrawerLayout != null && isDrawerOpen()) { 
      inflater.inflate(R.menu.global, menu); 
      showGlobalContextActionBar(); 
     } 
     super.onCreateOptionsMenu(menu, inflater); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if (mDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 

     if (item.getItemId() == R.id.action_example) { 
      Toast.makeText(getActivity(), "Example action.", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    /** 
    * Per the navigation drawer design guidelines, updates the action bar to show the global app 
    * 'context', rather than just what's in the current screen. 
    */ 
    private void showGlobalContextActionBar() { 
     ActionBar actionBar = getActionBar(); 
     actionBar.setDisplayShowTitleEnabled(true); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
     actionBar.setTitle(R.string.app_name); 
    } 

    private ActionBar getActionBar() { 
     return ((AppCompatActivity) getActivity()).getSupportActionBar(); 
    } 

    /** 
    * Callbacks interface that all activities using this fragment must implement. 
    */ 
    public static interface NavigationDrawerCallbacks { 
     /** 
     * Called when an item in the navigation drawer is selected. 
     */ 
     void onNavigationDrawerItemSelected(int position); 
    } 
} 

編輯2:

AtividadePrincipal.java

package br.net.beno.supercarrinho; 

import android.app.Activity; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.app.ActionBar; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.content.Context; 
import android.os.Build; 
import android.os.Bundle; 
import android.support.v7.widget.Toolbar; 
import android.view.Gravity; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.support.v4.widget.DrawerLayout; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

import br.net.beno.supercarrinho.R; 
import com.digits.sdk.android.Digits; 
import com.twitter.sdk.android.Twitter; 
import com.twitter.sdk.android.core.TwitterAuthConfig; 
import com.twitter.sdk.android.core.TwitterCore; 
import io.fabric.sdk.android.Fabric; 

public class AtividadePrincipal extends AppCompatActivity 
     implements NavigationDrawerFragment.NavigationDrawerCallbacks { 

    // Note: Your consumer key and secret should be obfuscated in your source code before shipping. 
    private static final String TWITTER_KEY = "Dwt1PeE72Ht0znFw1WjVD7ym3"; 
    private static final String TWITTER_SECRET = "NjxKx3fSfVI5DJ1xcuC5Eqy7AMPaJV5K1kzsCPYIdmxXWeNfoI"; 


    /** 
    * Fragment managing the behaviors, interactions and presentation of the navigation drawer. 
    */ 
    private NavigationDrawerFragment mNavigationDrawerFragment; 

    /** 
    * Used to store the last screen title. For use in {@link #restoreActionBar()}. 
    */ 
    private CharSequence mTitle; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET); 
     Fabric.with(this, new Digits(), new Twitter(authConfig)); 
     setContentView(R.layout.activity_atividade_principal); 

     // Trocando a actionbar pela toolbar 
     Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(mToolbar); 

     // Gaveta de navegacao 

     mNavigationDrawerFragment = (NavigationDrawerFragment) 
       getSupportFragmentManager().findFragmentById(R.id.navigation_drawer); 
     mTitle = getTitle(); 

     // Set up the drawer. 
     mNavigationDrawerFragment.setUp(
       R.id.navigation_drawer, 
       (DrawerLayout) findViewById(R.id.drawer_layout)); 
    } 

    @Override 
    public void onNavigationDrawerItemSelected(int position) { 
     // update the main content by replacing fragments 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction() 
       .replace(R.id.container, FragmentoListaCompras.newInstance(position + 1)) 
       .commit(); 
    } 

    public void onSectionAttached(int number) { 
     switch (number) { 
      case 1: 
       mTitle = getString(R.string.title_section1); 
       break; 
      case 2: 
       mTitle = getString(R.string.title_section2); 
       break; 
      case 3: 
       mTitle = getString(R.string.title_section3); 
       break; 
     } 
    } 

    public void restoreActionBar() { 
     ActionBar actionBar = getSupportActionBar(); 
//  actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
     actionBar.setDisplayShowTitleEnabled(true); 
     actionBar.setTitle(mTitle); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     if (!mNavigationDrawerFragment.isDrawerOpen()) { 
      // Only show items in the action bar relevant to this screen 
      // if the drawer is not showing. Otherwise, let the drawer 
      // decide what to show in the action bar. 
      getMenuInflater().inflate(R.menu.atividade_principal, menu); 
      restoreActionBar(); 
      return true; 
     } 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

編輯3:

activity_atividade_principal.xml:

<!-- A DrawerLayout is intended to be used as the top-level content view using match_parent for both width and height to consume the full space available. --> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    tools:context="br.net.beno.supercarrinho.AtividadePrincipal"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_height="128dp" 
     android:layout_width="match_parent" 
     android:minHeight="?android:attr/actionBarSize" 
     android:background="@color/colorPrimary" 
     android:gravity="bottom" /> 

    <!-- As the main content view, the view below consumes the entire 
     space available using match_parent in both dimensions. --> 
    <FrameLayout android:id="@+id/container" android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <!-- android:layout_gravity="start" tells DrawerLayout to treat 
     this as a sliding drawer on the left side for left-to-right 
     languages and on the right side for right-to-left languages. 
     If you're not building against API 17 or higher, use 
     android:layout_gravity="left" instead. --> 
    <!-- The drawer is given a fixed width in dp and extends the full height of 
     the container. --> 
    <fragment android:id="@+id/navigation_drawer" 
     android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:name="br.net.beno.supercarrinho.NavigationDrawerFragment" 
     tools:layout="@layout/fragment_navigation_drawer" /> 

</android.support.v4.widget.DrawerLayout> 

如果您還有其他問題,請詢問。 :)

+1

這段代碼是不夠的,得到你的空指針的線索。請發佈完整的堆棧跟蹤和一些上下文 – droidpl

回答

0

非常感謝這裏的一些評論和回覆,以及一些額外的研究,我能夠啓用它。

由於user5195185指出的那樣,好像DrawerLayout必須只有兩個孩子:內容(認爲它會重視你把任何內容),和抽屜(在ListView)。在Github上搜索一下後,我得到了this code

所以我把我Toolbar小部件默認FrameLayout一個LinearLayout裏面,但我仍然得到了同樣的空指針錯誤...

然後我檢查它的代碼,我發現,他們通過了主要活動爲上下文,所以我用getActivity()而不是getActionBar().getThemedContext()作爲上下文,它的工作原理!

之後,我發現this reply,允許欄留在ListView之上,並且我被設置了。

所以,我不知道它是否會導致未來的問題,但似乎是正確的方式讓工具欄和NavigationDrawer一起工作。

0

在您調用getActionBar()getSupportActionbar()之前,您應該將您的Toolbar設置爲ActionBar

你是否已經小號onCreateView叫「Fragment S前onCreate」設置ToolbarActionBarActivity

Toolbar toolbar = (Toolbar) findViewById(R.id.your_toolbar_id); 
setSupportActionBar(toolbar); 
// setActionBar(toolbar); // if you are not using AppCompatActivity 

編輯:

NavigationDrawerFragment的onCreateView首次調用...

那麼你很可能將這些行:

// Trocando a actionbar pela toolbar 
Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(mToolbar); 

的片段:

private ActionBar getActionBar() { 
    AppCompatActivity activity = (AppCompatActivity) getActivity(); 

    Toolbar mToolbar = (Toolbar) activity.findViewById(R.id.toolbar); 
    activity.setSupportActionBar(mToolbar); 

    return activity.getSupportActionBar(); 
} 

上述代碼可能仍然存在一些錯誤,但是在此順序中,ActionBar不會爲空。

+0

是的,我也添加了該視圖的來源... –

+0

我看到了您的更新後的帖子。但是,如果您的Fragment在'R.layout.activity_atividade_principal'中填充,則它的'onCreateView'可能會繼續。請在'onCreateView'和'setSupportActionBar(mToolbar)'之前插入'Log.d()';' – hata

+0

NavigationDrawerFragment的onCreateView先被調用... –

0

((AppCompatActivity)getActivity())。getSupportActionBar() 操作欄是活動的一部分,而不是片段。觀看您訪問操作欄的片段類中的每一行。另外,當您爲該活動擴展AppCompatActivity時,您必須使用getSupportActionBar。

0

據我所知,android.support.v4.widget。DrawerLayout應該只有兩個子項:主內容和導航視圖。我認爲那裏的工具欄是錯誤的。