2015-06-11 2 views
0

Я пытаюсь разработать вкладки салфетки в приложении для Android. Я искал его и попытался реализовать его сам. Вот что я сделал:setHomeButtonEnabled (false) возвращает null при использовании его для вкладок салфетки

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. Помимо этого, я получаю много устаревших методов. Пожалуйста, предложите мне лучший учебник. Я принимаю помощь this. Я пробовал все решения на SO, но никто из них не работает. Пожалуйста, помогите мне решить эту проблему.

+1

Вы можете попробовать использовать новую TabLayout библиотеки дизайна: [вкладки стиля Google Play с помощью TabLayout] (https://guides.codepath.com/android/Google-Play-Style- Вкладки-используя-TabLayout) – mrtn

ответ

0

Если ваша MainActivity распространяется ActionBarActivity, ваш getActionBar(); будет доступно.

Я думаю, что ваш пример немного старый. Вы можете попробовать this example с Android Studio

Смежные вопросы