2013-01-21 34 views
5

Khi sử dụng một ViewPager với PagerTabStrip:Rỗng ViewPager treo với PagerTabStrip

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

<android.support.v4.view.PagerTabStrip 
    android:id="@+id/pager_tab_strip" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="top" 
    android:paddingTop="4dp" 
    android:paddingBottom="4dp" 
    /> 

</android.support.v4.view.ViewPager> 

với pager có một adapter trống:

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

    ViewPager pager = (ViewPager) findViewById(R.id.pager); 

    FragmentPagerAdapter adapter = new FragmentPagerAdapter(getFragmentManager()) { 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return "test"; 
     } 

     @Override 
     public Fragment getItem(int i) { 
      return null; 
     } 

     @Override 
     public int getCount() { 
      return 0; 
     } 
    }; 
    pager.setAdapter(adapter); 

} 

App treo trên cảm động/di chuyển Tab Strip:

java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
     at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
     at java.util.ArrayList.get(ArrayList.java:304) 
     at android.support.v4.view.ViewPager.performDrag(ViewPager.java:1990) 

I nghĩthis line in ViewPager.performDrag() có thể là nguyên nhân.

Có phải lỗi hoặc điều gì đó sai với thiết lập chế độ xem của tôi không?

+0

chỉ là một dự đoán - cố gắng để trở lại 1 trong getCount() và một mảnh hợp lệ trong GetItem(). BTW, chiều rộng của PagerTabStrip nên được fill_parent – auval

Trả lời

3

Trong ViewPager code mục mảng được truy cập mà không cần bất kỳ kiểm tra (khi không có trang):

final ItemInfo firstItem = mItems.get(0); 
final ItemInfo lastItem = mItems.get(mItems.size() - 1); 

Điều này làm cho nó sụp đổ.

+0

bạn có thể sửa lỗi này không? – DeRagan

+0

@DeRagan Lỗi này nằm trong thư viện hỗ trợ, do đó, các nhà phát triển Google cần phải sửa lỗi đó. –

+0

Đã được giải quyết chưa? –

0

Lỗi này vẫn chưa được khắc phục, vì tôi gặp sự cố tương tự. Vấn đề là này hai dòng trong ViewPager Lớp android, trong performDrag (float x) Phương pháp:

final ItemInfo firstItem = mItems.get(0); 
final ItemInfo lastItem = mItems.get(mItems.size() - 1); 

Không có kiểm tra ở tất cả, nếu mItems ArrayList rỗng hay không. Điều này không khó để khắc phục cho Nhóm Android ...

Tuy nhiên tôi đã đưa ra giải pháp nhanh chóng và dơ bẩn mà tôi không đề xuất sử dụng. Chỉ cần chắc lớp riêng bạn mở rộng ViewPager và ghi đè lên các phương pháp, trong đó sản xuất vụ tai nạn và bao quanh nó bằng một thử, khối catch:

public class CustomViewPager extends ViewPager { 

    public CustomViewPager(Context context) { 
     super(context); 
    } 

    public CustomViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     boolean event = false; 
     try { 
      event = super.onInterceptTouchEvent(ev); 
     } catch (Exception e) { 
      Log.e(MainActivity.TAG, "ERROR: ViewPagerAdapter was empty"); 
     } 
     return event; 
    } 
} 

Đó là xấu thực hành sử dụng thử, khối catch cho logic chương trình, nhưng cho đến khi nhóm Android sửa lỗi này, đây là giải pháp duy nhất, làm việc cho tôi.

EDIT:

Đừng quên tham khảo tùy chỉnh của bạn ViewPager trong XML:

<com.package.CustomViewPager 
    android:id="@+id/viewPager_fragment_container" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <android.support.v4.view.PagerTabStrip 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 
</com.package.CustomViewPager> 
+1

Sẽ chỉ bắt được 'IndexOutOfBoundsException'. –

Các vấn đề liên quan