我正在尝试通过参考教程使用3个选项卡来学习在Android片段中滑动选项卡。我在行中得到空指针异常:
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
因为以下行返回null
actionBar=getActionBar();
这是完整的代码。
MainActivity.java
package com.example.pricababa.learningswipetabs;
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
public class MainActivity extends FragmentActivity implements ActionBar.TabListener {
ActionBar actionBar;
ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fragmentManager=getSupportFragmentManager();
viewPager= (ViewPager) findViewById(R.id.pager);
viewPager.setAdapter(new MyAdapter(fragmentManager));
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int i) {
actionBar.setSelectedNavigationItem(i);
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
actionBar=getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab tab1=actionBar.newTab();
tab1.setText("Tab 1");
tab1.setTabListener(this);
ActionBar.Tab tab2=actionBar.newTab();
tab1.setText("Tab 2");
tab1.setTabListener(this);
ActionBar.Tab tab3=actionBar.newTab();
tab1.setText("Tab 3");
tab1.setTabListener(this);
actionBar.addTab(tab1);
actionBar.addTab(tab2);
actionBar.addTab(tab3);
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
}
class MyAdapter extends FragmentPagerAdapter
{
public MyAdapter(FragmentManager fm){
super(fm);
}
@Override
public Fragment getItem(int i) {
Fragment fragment=null;
if(i==0)
fragment=new FragmentA();
else if(i==1)
fragment=new FragmentB();
else if(i==2)
fragment=new FragmentC();
return fragment;
}
@Override
public int getCount() {
return 3;
}
}
我尝试从类似的SO线程中应用以下修复程序:
1)getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
2)使用getSupportActionBar()
那没有用。如果有人可以解释其背后的原因并说明可能的解决办法,那将是非常有帮助的。
谢谢!
编辑:我正在关注本教程: See here