actionBar.setHomeButtonEnabled(false);
这行代码是根据logcat创建nullpointerException,如何解决这个问题?
package com.ftfl.ftflnavigationtab;
import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import com.ftfl.ftflnavigationtab.adapter.TabsPagerAdapter;
@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
public class MainActivity extends ActionBarActivity implements TabListener{
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private android.support.v7.app.ActionBar actionBar;
// Tab titles
private String[] tabs = { "General Health", "Vaccination", "Growth Rate" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initilization
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getSupportActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener((android.support.v7.app.ActionBar.TabListener) this));
}
/**
* on swiping the viewpager make respective tab selected
* */
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// on changing the page
// make respected tab selected
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}
答案 0 :(得分:0)
调试代码的哪一部分会抛出NullPointerException,然后,在它超出之前,您可以验证您使用它的对象是否为空。
如果您将对象作为参数传递,则可以执行以下操作:
if(MyObject != null)
{
DoOperation(MyObject);
}
如果您正在从对象调用方法:
if(MyObject != null)
{
MyObject.myMethod();
}
如果您认为需要,您也可以使用try / catch进行环绕,但解决问题的最佳方法是在使用对象之前对其进行验证。
答案 1 :(得分:0)
您应该考虑使用ActionBarActivity
,如下所示:
public class MainActivity extends ActionBarActivity {
}
Documentation advice:
注意:如果要实现包含操作栏的活动,则应使用ActionBarActivity类,该类是此类[FragmentActivity
]的子类,因此允许您在API级别7上使用Fragment API,更高。
编辑:
您的res/layout/styles.xml
可能如下所示:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
</style>
如果您希望操作栏遵循黑暗主题,则应删除.NoActionBar
或将其替换为.DarkActionBar
。
答案 2 :(得分:0)
NPE在您使用actionBar
分配后首次访问getSupportActionBar()
时发生,这意味着getSupportActionBar()
返回null。根据文档,当当前主题没有操作栏时,它返回null。
您的清单必须声明支持操作栏的主题,例如Theme.AppCompat.Light
。把它放在清单中的活动声明中,如下所示:
<activity android:theme="@style/Theme.AppCompat.Light" ... >
此处有更多信息:http://developer.android.com/guide/topics/ui/actionbar.html#Adding