2015-07-11 73 views
1

我想使用ViewPager和片段编写一个选项卡布局的应用程序,但每次运行它,它崩溃与nullPointerException。Android Studio - 滑动视图与选项卡布局

这是我的主要活动代码:

import android.annotation.TargetApi; 
import android.app.ActionBar; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.view.ViewPager; 

@TargetApi(11) 
public class MainActivity extends FragmentActivity { 
    ViewPager Tab; 
    TabPagerAdapter TabAdapter; 
    ActionBar actionBar; 

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

     TabAdapter = new TabPagerAdapter(getSupportFragmentManager()); 

     Tab = (ViewPager)findViewById(R.id.pager); 
     Tab.setOnPageChangeListener(
       new ViewPager.SimpleOnPageChangeListener() { 
        @Override 
        public void onPageSelected(int position) { 

         actionBar = getActionBar(); 
         actionBar.setSelectedNavigationItem(position);     } 
       }); 

     Tab.setAdapter(TabAdapter); 

     actionBar = getActionBar(); 
     //Enable Tabs on Action Bar 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     ActionBar.TabListener tabListener = new ActionBar.TabListener(){ 

      @Override 
      public void onTabReselected(android.app.ActionBar.Tab tab, 
             FragmentTransaction ft) { 
       // TODO Auto-generated method stub 

      } 

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

       Tab.setCurrentItem(tab.getPosition()); 
      } 

      @Override 
      public void onTabUnselected(android.app.ActionBar.Tab tab, 
             FragmentTransaction ft) { 
       // TODO Auto-generated method stub 

      }}; 
     //Add New Tab 

     actionBar.addTab(actionBar.newTab().setText("Android").setTabListener(tabListener)); 
     actionBar.addTab(actionBar.newTab().setText("iOS").setTabListener(tabListener)); 
     actionBar.addTab(actionBar.newTab().setText("Windows").setTabListener(tabListener)); 

    } 

TabPagerAdapter.java

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentStatePagerAdapter; 

public class TabPagerAdapter extends FragmentStatePagerAdapter { 
    public TabPagerAdapter(FragmentManager fm) { 
     super(fm); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public Fragment getItem(int i) { 
     switch (i) { 
      case 0: 
       //Fragement for Android Tab 
       return new Android(); 
      case 1: 
       //Fragment for Ios Tab 
       return new Ios(); 
      case 2: 
       //Fragment for Windows Tab 
       return new Windows(); 
     } 
     return null; 

    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return 3; //No of Tabs 
    } 
} 

这是我的logcat的样子:

07-11 12:27:21.803 11967-11967/com.example.diana.myapplication3 D/dalvikvm﹕ Late-enabling CheckJNI 
07-11 12:27:21.943 11967-11967/com.example.diana.myapplication3 E/ResourceType﹕ 0x5acd8640: Failed to ResTable::remove() cookie = 0x3, not last table. mHeaders.size() = 4. Warning for spontaneous crashes when the garbage collector runs. 
07-11 12:27:21.943 11967-11967/com.example.diana.myapplication3 E/asset﹕ Error removing runtime skin resource (cookie 0x3) 
07-11 12:27:21.943 11967-11967/com.example.diana.myapplication3 I/asset﹕ Problem removing all runtime skin resources 
07-11 12:27:22.043 11967-11967/com.example.diana.myapplication3 D/AndroidRuntime﹕ Shutting down VM 
07-11 12:27:22.043 11967-11967/com.example.diana.myapplication3 W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x415478b0) 
07-11 12:27:22.053 11967-11967/com.example.diana.myapplication3 E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.diana.myapplication3/com.example.diana.myapplication3.MainActivity}: java.lang.NullPointerException 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2311) 
      at android.app.ActivityThread.access$600(ActivityThread.java:149) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:5214) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:525) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
      at com.example.diana.myapplication3.MainActivity.onCreate(MainActivity.java:35) 
      at android.app.Activity.performCreate(Activity.java:5133) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2225) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2311) 
            at android.app.ActivityThread.access$600(ActivityThread.java:149) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:5214) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:525) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555) 
            at dalvik.system.NativeStart.main(Native Method) 

我在这里想问题是我的actionBar返回null,因此我加了

getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 

但我得到了同样的错误。

任何想法?

+1

把完整的logcat – Rustam

+0

请把日志猫的文字,而不是截图。谢谢。 – galath

回答

0

我发现问题所在。我删除了getWindow().requestFeature(Window.FEATURE_ACTION_BAR);而不是actionBar = getActionBar();我用actionBar = getSupportActionBar();MainActivity extends ActionBarActivity

这解决了我的问题,希望它也能帮助别人。

相关问题