setHomeButtonEnabled(false)在将其用于滑动选项卡时返回null

时间:2015-06-11 11:19:50

标签: java android android-actionbar

我正在尝试在我的Android应用中开发滑动标签。我用Google搜索并尝试自己实现它。这是我做的:

MainActivity.java:

package com.example.shiza.swipetabs;

import android.app.ActionBar;

import android.app.FragmentTransaction;
import android.support.v4.app.FragmentActivity;
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.Window;


public class MainActivity extends FragmentActivity implements ActionBar.TabListener{
    ActionBar bar;
    ViewPager viewPager;
    FragmentPageAdapter ft;

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

//        viewPager = new ViewPager(this);
        viewPager.setId(R.id.pager);

        setContentView(viewPager);

        ft = new FragmentPageAdapter(getSupportFragmentManager());

        viewPager.setAdapter(ft);

        bar = getActionBar();

        try {
            bar.setHomeButtonEnabled(false);
        } catch (Exception e) {
            e.printStackTrace();
        }
        bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);

        bar.addTab(bar.newTab().setText("A").setTabListener(this));
        bar.addTab(bar.newTab().setText("B").setTabListener(this));
        bar.addTab(bar.newTab().setText("C").setTabListener(this));
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                bar.setSelectedNavigationItem(position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
        viewPager.setCurrentItem(tab.getPosition());
    }

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

    }

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

    }
}

FragmentPageAdapter.java:

package com.example.shiza.swipetabs;

//import android.app.FragmentManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

/**
 * Created by Shiza on 11-06-2015.
 */
public class FragmentPageAdapter extends FragmentPagerAdapter{

    public FragmentPageAdapter(FragmentManager fm)
    {
        super(fm);
    }
    @Override
    public Fragment getItem(int position) {

        switch (position)
        {
            case 1:
                return new Fragment_a();

            case 2:
                return new Fragment_b();
            case 3:
                return new Fragment_c();
        }
        return null;
    }

    @Override
    public int getCount() {
        return 3;
    }
}

一切都很好,但是当我收到以下警告时:

Method invocation 'bar.setHomeButtonEnabled(false)' may produce 'java.lang.NullPointerException

在运行时,我在同一行得到NullPointerException 我在StackOverflow上搜索了它,并且知道我需要使用v7.support库。我无法实现这一点。它看起来像......

 bar = getActionBar();

...返回null。除此之外,我得到了许多弃用的方法。请给我一个更好的教程。我正在接受https://stackoverflow.com/a/11903863的帮助。我已经在SO上尝试了所有解决方案,但它们都没有工作。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

如果您的MainActivity扩展 ActionBarActivity ,那么您的getActionBar();将有空。

我认为你的例子有点老了。您可以尝试使用Android Studio {/ 3>} this example

相关问题