2017-04-06 160 views
0

首先,我知道这个问题之前已经被问到过,我花了一个小时看其他解决方案,主要是从 - getActionBar() returns null,没有一个工作,所以另一双眼睛可能能够做些事情。getSupportActionBar()。setDisplayHomeAsUpEnabled(true);抛出NullPointerException

NavigationDrawer类其他类继承:

public class NavigationDrawer extends AppCompatActivity { 

String[] mDrawerTitles; 
DrawerLayout mDrawerLayout; 
ListView mDrawerList; 
ActionBarDrawerToggle mDrawerToggle; 
String activityTitle; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.navigation_drawer_layout); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    mDrawerTitles = getResources().getStringArray(R.array.drawer_array); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerList = (ListView) findViewById(R.id.left_drawer); 
    activityTitle = getTitle().toString(); 

    getSupportActionBar().setDisplayHomeAsUpEnabled(true); //here is where the error is thrown 
    getSupportActionBar().setHomeButtonEnabled(true); 

    addDrawerItems(); 
    navDrawerSetup(); 

} 

MainActiviy延伸以上:

public class MainActivity extends NavigationDrawer { 

int[]images={R.drawable.user_manual,R.drawable.tips_tricks, R.drawable.troubleshooting}; 
Integer printer; 
ListView myListView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View contentView = inflater.inflate(R.layout.activity_main, null, false); 
    mDrawerLayout.addView(contentView, 0); 
} 

抽屉式导航的.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout  xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

<FrameLayout 
    android:id="@+id/content_frame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<ListView 
    android:id="@+id/left_drawer" 
    android:layout_width="240dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:background="#999" 
    android:choiceMode="singleChoice" 
    android:divider="@android:color/transparent" 
    android:dividerHeight="0dp" /> 


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

styles.xml

<resources> 

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
</style> 

<style name="AppTheme.NoActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
</style> 

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> 

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /> 

</resources> 

activity_main

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout  xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:context="com.example.shelleyd.myapplication.MainActivity"> 

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/AppTheme.PopupOverlay" /> 

</android.support.design.widget.AppBarLayout> 

content_main

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/content_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
app:layout_behavior="@string/appbar_scrolling_view_behavior" 
tools:context="com.example.shelleyd.myapplication.MainActivity" 
tools:showIn="@layout/activity_main"> 

<ListView 
    android:id="@+id/myList" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_gravity="center_vertical" 
    android:layout_weight="1" /> 

</LinearLayout> 

回答

1

NavigationDrawer活动要执行setContentView(R.layout.navigation_drawer_layout),并在navigation_drawer_layout没有任何Toolbar,从而导致异常。

+0

是的,这是它的感谢。该应用程序现在打开,但没有导航抽屉显示,任何想法为什么? – Norno3

+0

你严重滥用继承权。分开这些活动。它会让你的代码更清洁,让你的生活更轻松。 – azizbekian

+0

好的,我只是按照这个 - http://stackoverflow.com/a/25254794,并认为我也是这样做的。我想现在我会在每个活动中恢复为导航代码。 – Norno3

1

做你NavigationDrawer.class

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); //This is null 
setSupportActionBar(toolbar); 

下面要设置活动工具栏为空,因为在你的R.layout.activity_main与R.id.toolbar ID没有意见。因此,当您尝试在上面的代码之后设置工具栏时,您试图在空对象中设置一个属性,从而产生空指针异常。

在您的活动中删除上面两行或使用R.layout.activity_main布局文件中的R.id.toolbar ID声明工具栏视图。这样做会解决问题。

相关问题