2015-06-11 20 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的幫助。我已經嘗試過所有的解決方案,但都沒有工作。請幫我解決這個問題。

+1

您可以嘗試使用設計庫的新TabLayout:[Google Play Style Tabs using TabLayout](https://guides.codepath.com/android/Google-Play-Style-選項卡 - 使用 - TabLayout) – mrtn

回答

0

如果您的MainActivity擴展爲ActionBarActivity,您的getActionBar();將可用。

我認爲你的例子有點舊了。您可以嘗試使用Android Studio this example

相關問題