从supportv4更改为appcompatv7时出现java NulledPointer异常
我的应用程序使用主题。全息图。灯光使用com。安卓支持:support-v4:21.0.3。现在我将我的应用程序主题改为主题。Appcompat并将gradle依赖项也从“com.安卓.support:support-v4:21.0.3”更改为“com.安卓.support:Appcompat-v7:21.0.3”。 在这些更改之后,每当我启动我的应用程序时,它都会崩溃。 还有拿到日志
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:694) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void 安卓.app.ActionBar.setHomeButtonEnabled(boolean)' on a null object reference at com.viter.安卓.navigationdrawerexample.MainActivity.onCreate(MainActivity.java:99)
我的职能是
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Code for Tabs
mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager());
// Set up the action bar.
final ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mAppSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
actionBar.addTab(
actionBar.newTab()
.setText(mAppSectionsPagerAdapter.getPageTitle(i))
.setTabListener(this));
}
// Navigation Drawer
mTitle = mDrawerTitle = getTitle();
mPlanetTitles = getResources().getStringArray(R.array.planets_array);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
// 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
mDrawerList.setAdapter(new ArrayAdapter<String>(this,
R.layout.drawer_list_item, mPlanetTitles));
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
// enable ActionBar app icon to behave as action to toggle nav drawer
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
// ActionBarDrawerToggle ties together the the proper interactions
// between the sliding drawer and the action bar app icon
mDrawerToggle = new ActionBarDrawerToggle(
this, /* host Activity */
mDrawerLayout, /* DrawerLayout object */
R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
R.string.drawer_open, /* "open drawer" description for accessibility */
R.string.drawer_close /* "close drawer" description for accessibility */
) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null) {
selectItem(0);
}
}
请帮我解决这个问题
# 1 楼答案
您可能应该使用
getSupportActionBar()
而不是getActionBar()
(并且扩展ActionBarActivity
而不是FragmentActivity
)# 2 楼答案
使用AppCompat v21,您可以添加工具栏并将其用作操作栏。这并不难做到,而且大部分代码都不需要更改。主要的事情是将工具栏添加到“活动”主菜单中。xml
然后用这个来制作你的Actionbar
}
根据代码的其他部分,它们可能还有一些需要更新的内容。但这应该能帮你解决大部分问题。更多详细信息请参见:https://chris.banes.me/2014/10/17/appcompat-v21/
# 3 楼答案
检查您的
正在为actionBar返回null
您可能在错误的类中调用了代码