getActionBar()返回null,其中Main Activity扩展FragmentActivity

时间:2015-07-03 14:19:32

标签: android android-fragments

我正在尝试通过参考教程使用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

0 个答案:

没有答案