2016-02-05 109 views
0

我正在尝试使用this tutorial构建带有可滑动视图的Android选项卡布局。getActionBar()在FragmentActivity中返回null

FragmentActivity是:

public class BookDetailsActivity extends FragmentActivity implements ActionBar.TabListener { 
    private ViewPager viewPager; 
    private TabsPagerAdapter mAdapter; 
    private ActionBar actionBar; 
    // Tab titles 
    private String[] tabs = {"Description", "Find book"}; 
    static ArrayList<String> book; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 
     setContentView(R.layout.activity_books_details); 

     book = new ArrayList<String>(); 
     book = (ArrayList<String>) getIntent().getSerializableExtra("bookMap"); 

     // Initilization 
     viewPager = (ViewPager) findViewById(R.id.pager); 
     actionBar = getActionBar(); 
     mAdapter = new TabsPagerAdapter(getSupportFragmentManager(), book, getApplicationContext()); 

     viewPager.setAdapter(mAdapter); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     // Adding Tabs 
     for (String tab_name : tabs) { 
      actionBar.addTab(actionBar.newTab().setText(tab_name) 
        .setTabListener(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) { 
      } 
     }); 
    } 

    public static ArrayList<String> getRequiredData() { 
     return book; 
    } 

    @Override 
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) { 
    } 

    @Override 
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { 
     // on tab selected 
     // show respected fragment view 
     viewPager.setCurrentItem(tab.getPosition()); 
    } 

    @Override 
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) { 
    } 

} 

但我得到一个错误:

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

错误说:

Attempt to invoke virtual method 'void android.app.ActionBar.setNavigationMode(int)' on a null object reference 

为什么我收到这错误?

+1

使用getSupportActionBar(),而不是 – Pooya

+2

[getActionBar的可能的复制( )返回null](http://stackoverflow.com/questions/6867076/getactionbar-returns-null) –

+0

检查此链接:http:// stackoverflow。com/questions/35203624/android-studio-actionbar-tablistener-does-not-work-with-appcompatactivity it is deprecated – Mohsen

回答

0

我同意Pooya。 getSupportActionBar()应该工作

0

变化getActionBar()getSupportActionBar()

也改变FragmentActivity到AppcompatActivity

1

Android Studio: ActionBar.TabListener does not work with AppCompatActivity?

ActionBar.TabListener是一个过时interface。我希望你不会使用,在未来的。

就像我以前在我的回答说:延伸至FragmentActivity

请检查此链接:Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference

使用AppCompatActivity,而不是添加ActionBar,如果你使用它,你将需要这个太:

ActionBar actionBar = getSupportActionBar();