2014-08-30 53 views
1

在標籤頁之間滑動時,我的ViewPager會崩潰。它返回一個NullPointerException。這是當我嘗試從一個標籤頁滑動到另一個標籤頁時發生的堆棧跟蹤。在標籤頁上滑動時發生NullPointerException ViewPager

08-30 10:46:54.524: E/AndroidRuntime(9877): FATAL EXCEPTION: main 
08-30 10:46:54.524: E/AndroidRuntime(9877): Process: com.justein.testioutracker, PID: 9877 
08-30 10:46:54.524: E/AndroidRuntime(9877): java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at java.util.ArrayList.get(ArrayList.java:308) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at com.android.internal.app.ActionBarImpl.setSelectedNavigationItem(ActionBarImpl.java:363) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at com.justein.testioutracker.IOUFragmentActivity$1.onPageScrollStateChanged(IOUFragmentActivity.java:48) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.support.v4.view.ViewPager.setScrollState(ViewPager.java:403) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.support.v4.view.ViewPager.smoothScrollTo(ViewPager.java:811) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:570) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:556) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:514) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:495) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at com.justein.testioutracker.IOUFragmentActivity.onTabSelected(IOUFragmentActivity.java:62) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at com.android.internal.app.ActionBarImpl.selectTab(ActionBarImpl.java:577) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at com.android.internal.app.ActionBarImpl.setSelectedNavigationItem(ActionBarImpl.java:363) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at com.justein.testioutracker.IOUFragmentActivity$1.onPageScrollStateChanged(IOUFragmentActivity.java:48) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.support.v4.view.ViewPager.setScrollState(ViewPager.java:403) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:1858) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1859) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2107) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1519) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.app.Activity.dispatchTouchEvent(Activity.java:2458) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2043) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.View.dispatchPointerEvent(View.java:7911) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4130) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3997) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3537) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3593) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3562) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3669) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3570) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3726) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3543) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3593) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3562) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3570) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3543) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5740) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5713) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5676) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5820) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:215) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:201) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:5793) 
08-30 10:46:54.524: E/AndroidRuntime(9877):  at android.view.ViewRootImpl$ConsumeBatchedInpu 

這裏是我FragmentPagerAdapter類:

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

public class FragmentPageAdapter extends FragmentPagerAdapter { 

    public FragmentPageAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int arg0) { 
     switch(arg0) { 
     case 0: 
      return new OweFragment(); 
     case 1: 
      return new OwedFragment(); 
     default: 
      return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return 2; 
    } 

} 

這裏是我的FragmentActivity:

import android.app.ActionBar; 
import android.app.ActionBar.Tab; 
import android.app.FragmentTransaction; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.view.ViewPager; 
import android.view.Menu; 

public class IOUFragmentActivity extends FragmentActivity implements ActionBar.TabListener { 
    private ActionBar actionBar; 
    private String name; 
    private FragmentPageAdapter ft; 
    private ViewPager viewPager; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_ioufragment); 
     ft = new FragmentPageAdapter(getSupportFragmentManager()); 
     viewPager = (ViewPager) findViewById(R.id.pager); 
     viewPager.setAdapter(ft); 
     Intent intent = getIntent(); 
     name = intent.getStringExtra("name"); 
     actionBar = getActionBar(); 
     actionBar.setTitle(name); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     actionBar.addTab(actionBar.newTab().setText("Owe").setTabListener(this)); 
     actionBar.addTab(actionBar.newTab().setText("Owed").setTabListener(this)); 
     viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int arg0) { 
//    actionBar.setSelectedNavigationItem(arg0); 

      } 

      @Override 
      public void onPageScrolled(int arg0, float arg1, int arg2) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onPageScrollStateChanged(int arg0) { 
       actionBar.setSelectedNavigationItem(arg0); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // TODO Auto-generated method stub 
     getMenuInflater().inflate(R.menu.actionbar_menu, menu); 
     return true; 
    } 

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

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

    } 

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

    } 
} 

如果更多的代碼是必要搞清楚這個問題的答案,讓我知道,我將發佈我的ListFragment類。

+0

什麼是你的問題? – Sablefoste 2014-08-30 14:49:43

回答

0

我想問題是在onPageScrollStateChanged。請注意,它不接受頁面索引,而是接受狀態標誌。剛看到你已經更新,所以這是它的調用堆棧...

onPageScrollStateChanged

相關問題