NullPointerException: mit ActionBar.setDisplayHomeAsUpEnabled(boolean)' auf ein null-Objekt Verweis
Bekomme ich die nullPointerException zur Laufzeit:
Verursacht durch: java.lang.NullPointerException: Versuch zum aufrufen der virtuellen Methode void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)'
auf ein null-Objekt Verweis
code von mainActivity:
package com.example.vasilis.spangreek;
import android.app.ActionBar;
import android.app.Activity;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ExpandableListView;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import adapter.ExpandableListViewAdapter;
import model.NavDrawerItem;
public class MainActivity extends Activity {
private DrawerLayout mDrawerLayout;
private ExpandableListView mExpandableListView;
private ActionBarDrawerToggle mActionBarDrawerToggle;
//nav drawer Title
private CharSequence mDrawerTitle;
//used to store app titles
private CharSequence mTitles;
//slide menu items
private String[] navMenuItems;
private String[] navSubMenuItems;
private TypedArray navMenuIcons;
private List<NavDrawerItem> groupList;
private List<NavDrawerItem> childList;
private Map<NavDrawerItem, List<NavDrawerItem>> mapList;
private ExpandableListViewAdapter mAdapter;
ActionBar mActionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTitles = mDrawerTitle = getTitle();
//nav drawer icons
navMenuIcons = getResources().obtainTypedArray(R.array.nav_icons);
mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
createGroupList();
CreateChildList();
//Recycle the typed array
navMenuIcons.recycle();
mExpandableListView = (ExpandableListView)findViewById(R.id.list_slideMenu);
mAdapter = new ExpandableListViewAdapter(this, mapList, groupList);
mExpandableListView.setAdapter(mAdapter);
mActionBar = getActionBar();
//enabling action bar app icon and behaving it as toggle button
mActionBar.setDisplayHomeAsUpEnabled(true);
mActionBar.setHomeButtonEnabled(true);
//toggle
mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.string.app_name, R.string.app_name) {
public void onDrawerClosed(View drawerView) {
mActionBar.setTitle(mDrawerTitle);
//calling onPrepareOptionsMenu() to hide action bar icons
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
mActionBar.setTitle(mDrawerTitle);
//calling onPrepareOptionsMenu() to hide action bar icons
invalidateOptionsMenu();
}
};
mActionBarDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_drawer);
mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
if(savedInstanceState == null) {
//displayView(0);
}
}
/***
* Called when invalidateOptionsMenu() is triggered
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
//if nav drawer is opened, hide the action items
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mExpandableListView);
menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
@Override
public void setTitle(CharSequence title) {
mTitles = title;
getActionBar().setTitle(mTitles);
}
/**
* 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.
mActionBarDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//Pass any configuration change to the drawer toggls
mActionBarDrawerToggle .onConfigurationChanged(newConfig);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//toggle nav drawer on selecting action bar app icon/title
if (mActionBarDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
//Handle action bar actions click
switch (item.getItemId()) {
case R.id.action_settings:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void createGroupList() {
//load slide menu items
navMenuItems = getResources().getStringArray(R.array.nav_items);
groupList =new ArrayList<NavDrawerItem>();
for (int i = 0 ; i < navMenuItems.length ; i++ ) {
groupList.add(i , new NavDrawerItem(navMenuItems[i], navMenuIcons.getResourceId(i, -1)));
}
}
private void CreateChildList() {
mapList = new LinkedHashMap<NavDrawerItem, List<NavDrawerItem>>();
navSubMenuItems = getResources().getStringArray(R.array.nav_sub_items);
childList = new ArrayList<>();
for ( NavDrawerItem item : groupList) {
if(item.getTitle().equalsIgnoreCase("learning Spanish")) {
for (int i = 0 ; i < navSubMenuItems.length ; i ++) {
childList.add(i, new NavDrawerItem(navSubMenuItems[i]));
}
}
mapList.put(item,childList);
}
}
private void setGroupIndicatorToRight() {
/* Get the screen width */
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
mExpandableListView.setIndicatorBounds(width - getDipsFromPixel(35), width
- getDipsFromPixel(5));
}
//Convert pixel to dip
public int getDipsFromPixel(float pixels) {
//Get the screen's density scale
final float scale = getResources().getDisplayMetrics().density;
//Convert the dps to pixels, based on density scale
return (int) (pixels * scale + 0.5f);
}
}
den code-Zeilen das problem sind :
mActionBar = getActionBar();
//enabling action bar app icon and behaving it as toggle button
mActionBar.setDisplayHomeAsUpEnabled(true);
mActionBar.setHomeButtonEnabled(true);
ich benutze : style-name="AppTheme" parent="Thema.AppCompat.Licht.DarkActionBar"
Habe ich die getSupportActionBar (), aber ich habe nicht geschafft hat, irgendeine Lösung
da getActionBar(); ist null zurückgeben.
ist ur-Aktivität verlängern ActionBarActivity ?
Bearbeiten und einfügen von kompletten code, um das problem herauszufinden.
Ihre minSDK sollte 11 oder höher dann.
ist ur-Aktivität verlängern ActionBarActivity ?
Bearbeiten und einfügen von kompletten code, um das problem herauszufinden.
Ihre minSDK sollte 11 oder höher dann.
InformationsquelleAutor Vasilisfoo | 2015-06-06
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Ursache für Ihr Problem ist die Verwendung
MainActivity extend Activity
mit Unterstützung Themastyle name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"
. Es ist unvereinbar Dinge.Die min-sdk, die Sie benötigen?
In Ihrem code mit
MainActivity extends Activity
Sie brauchen nichtAppCompatTheme
. Verwendenname="AppTheme" parent="android:Theme.Light
"Wenn Sie
Theme.AppCompat.Light.DarkActionBar
Sie sollten erweitern Sie IhreActivity
ausAppCompatActivity
, und verwenden SiegetSupportActionBar()
.Statt:
verwenden:
und statt:
verwenden:
InformationsquelleAutor TetianaDev
Dieses problem könnte verursacht werden durch Ihr Design. Prüfen Sie erneut, und stellen Sie sicher, dass es Eltern mit
Theme.AppCompat.Light.DarkActionBar
.Wenn Ihre Tätigkeit erstreckt sich
AppCompatActivity
oderActionBarActivity
rufengetSupportActionBar()
.getSupportActionBar()
. Mein Problem wurde behoben, durch das hinzufügen<item name="windowActionBar">true</item>
in meinem styles.xml.InformationsquelleAutor Anggrayudi H
zum Beispiel:
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
InformationsquelleAutor Chandresh Kachariya
Setzen
assert getActionBar () != null;
nachmActionBar = getActionBar();
InformationsquelleAutor Shvet
In meinem Fall, ich habe vergessen meine init-Symbolleiste, so, bevor Sie getSupportActionBar, ich hatte, dies zu tun:
InformationsquelleAutor Jorge Casariego