gpt4 book ai didi

android - NullPointerException : with ActionBar. setDisplayHomeAsUpEnabled(boolean)' 在空对象引用上

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:52:27 25 4
gpt4 key购买 nike

我在运行时得到这个 nullPointerException:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference

来自 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);
}
}

有问题的代码行是:

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

我使用:style name="AppTheme"parent="Theme.AppCompat.Light.DarkActionBar"

我已经使用了 getSupportActionBar() 但我还没有找到任何解决方案

最佳答案

问题的原因是使用支持主题 style name="AppTheme"parent="Theme.AppCompat.Light.DarkActionBar"MainActivity extend Activity。这是不兼容的东西。您需要哪个 min sdk?

在具有 MainActivity extends Activity 的代码中,您不需要 AppCompatTheme。使用 name="AppTheme"parent="android:Theme.Light"

如果您正在使用 Theme.AppCompat.Light.DarkActionBar,您应该从 AppCompatActivity 扩展您的 Activity,并使用 getSupportActionBar ()

代替:

public class MainActivity extends Activity {

使用:

public class MainActivity extends AppCompatActivity {

而不是:

getActionBar().setTitle(mTitles);

使用:

getSupportActionBar().setTitle(mTitles);

关于android - NullPointerException : with ActionBar. setDisplayHomeAsUpEnabled(boolean)' 在空对象引用上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30681918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com