actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS) deprecated

前端 未结 4 1443
悲哀的现实
悲哀的现实 2020-12-06 13:24

I\'m following the tutorial https://www.youtube.com/watch?v=VVahIc8yENk and I\'m getting the error

java.lang.NullPointerException: Attempt to invoke

相关标签:
4条回答
  • 2020-12-06 13:43
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setNavigationMode(int)' on a null object reference
    

    Your theme apparently is one that does not have an action bar. Since you are not using appcompat-v7, make sure that you are using a theme that supports the native action bar, such as one of the Theme.Holo series.

    If, instead, you are trying to use appcompat-v7, you need to inherit from ActionBarActivity and you need to use getSupportActionBar(), not getActionBar().

    Also note that action bar tabs were deprecated as of Android 5.0. You should consider another tab solution, such as the combination of ViewPager and PagerTabStrip.

    0 讨论(0)
  • 2020-12-06 13:52

    finally i found answer. 1st your android sdk

    <uses-sdk android:minSdkVersion="11" />
    

    it must higher than 11. 2nd your theme must have actionbar like

    android:theme="Theme.AppCompat"
    

    3rd don't use this code in your activity

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    

    4th instead of import android.support.v4.app.ActionBar use import android.support.v7.app.ActionBar in your activity

    5th change this actionBar=getActionBar(); to actionbar=getSupportActionBar();

    0 讨论(0)
  • 2020-12-06 13:53

    I was following Vivz example in youtube but when the method deprecated i had to find another way. Instead of adding tabs to the actionbar try:

    Modify your adapter:

    public class CollectionPagerAdapter extends FragmentStatePagerAdapter {
    
        private String[] titles = {"Item 1", "Item 2", "Item 3" };
    
        public CollectionPagerAdapter(FragmentManager fm) {
            super(fm);
        }
    
        @Override
        public Fragment getItem(int i) {
            switch(i){
              case 0:
                 return new FragmentA();
              case 1:
                 return new FragmentB();
              case 2:
                 return new FragmentC();        
            }
            return null;
        }
    
        @Override
        public int getCount() {
            return titles.length;
        }
    
        @Override
        public CharSequence getPageTitle(int position) {
            return titles[position];
        }
    }
    

    And in the activity that you would like to implement the tabs try

    public class Tabtest extends ActionBarActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tab_test);
    
        ViewPager pager = (ViewPager) findViewById(R.id.your_view_pager);
        pager.setAdapter(new CollectionPagerAdapter(getSupportFragmentManager()));
    
        PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
        tabs.setViewPager(pager);
    }
    

    Now if you would like to style your tabs like Google Play store with a moving indicator under the tab name and move while the user scrolls compile this library

    compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
    

    And modify your viewpager layout file like this:

    <LinearLayout
      //obviously add width and height and other necessery stuff
      android:orientation="vertical">
    
    <com.astuetz.PagerSlidingTabStrip
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="48dip" />
    
    <android.support.v4.view.ViewPager
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    
    
    </LinearLayout>
    

    And then you are going to have the desired effect.

    Hope it helps!!!

    0 讨论(0)
  • 2020-12-06 14:00

    you can use "PagerSlidingTabStrip" replacing "setNavigationMode"

    here a tutorial and here a example in Github

    0 讨论(0)
提交回复
热议问题