1

我使用EndlessAdapter通過Commonsware。當我有一個header視圖中添加我得到我的listView,這個我得到這個錯誤和LogCatArrayOutOfBounds當使用addHeaderView()和EndlessAdapter時

04-22 17:06:15.200: E/AndroidRuntime(6401): FATAL EXCEPTION: main 
04-22 17:06:15.200: E/AndroidRuntime(6401): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at java.util.ArrayList.get(ArrayList.java:304) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.widget.ListView.dispatchDraw(ListView.java:3207) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.draw(View.java:13715) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.widget.AbsListView.draw(AbsListView.java:3653) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12650) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12694) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2910) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12588) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12694) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2910) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12588) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12694) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2910) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12588) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12694) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2910) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12588) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12694) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2910) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12588) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12694) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2910) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12588) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12694) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2910) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12588) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12694) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2910) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12588) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.View.getDisplayList(View.java:12694) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1198) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.ViewRootImpl.draw(ViewRootImpl.java:2173) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2045) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1854) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.Choreographer.doFrame(Choreographer.java:532) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.os.Handler.handleCallback(Handler.java:725) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.os.Handler.dispatchMessage(Handler.java:92) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.os.Looper.loop(Looper.java:137) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at android.app.ActivityThread.main(ActivityThread.java:5226) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
04-22 17:06:15.200: E/AndroidRuntime(6401):  at dalvik.system.NativeStart.main(Native Method) 

如果我刪除headerview,我闖過了這一點。

補充:這裏是其他代碼在情況下,這是不相關的報頭視圖:

public class EndlessProfileAdapter extends EndlessAdapter implements 
      IItemsReadyListener { 

     private boolean hasMoreData = true; 
     private RotateAnimation rotate = null; 
     private View pendingView = null; 
     private ArrayList<ProfileReview> profileList; 

     public EndlessProfileAdapter(Context context, 
       ArrayList<ProfileReview> profileList, Typeface tf) { 
      super(new ProfileAdapter(context, profileList, tf)); 

      this.profileList = profileList; 

      rotate = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF, 
        0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
      rotate.setDuration(600); 
      rotate.setRepeatMode(Animation.RESTART); 
      rotate.setRepeatCount(Animation.INFINITE); 

     } 

@Override 
protected boolean cacheInBackground() throws Exception { 
    Log.d("Cache Array Size", String.valueOf(profileList.size())); 
    new ReviewTask(this, profileList.size()).execute(); 
    return hasMoreData; 
} 

@Override 
protected void appendCachedData() { 

} 

void startProgressAnimation() { 
    if (pendingView != null) { 
     pendingView.startAnimation(rotate); 
    } 
} 

public void onItemsReady(ArrayList<ProfileReview> data) { 

    profileList.addAll(data); 
    endlessAdapter.onDataReady(); 
    hasMoreData = profileList.isEmpty(); 
} 

內部任務onPostExecute()

profileList = new ArrayList<ProfileReview>(); 

      for (int i = startPoint; i < startPoint + 10; i++) { 
       ProfileReview p = new ProfileReview(itemIdList.get(i), 
         reviewIdList.get(i), reviews.get(i), datelist.get(i), 
         itemslist.get(i), ratings.get(i), cats.get(i)); 
       profileList.add(p); 
      } 

      return profileList; 

EndlessAdapter需要十組在列表中。前10項工作...但在11,它崩潰。該logcat的崩潰實際上是發生在第二輪10(所以11日的項目列表中的用戶滾動過去的第一個10後),和崩潰之前profileList.add(p);

更新了所需的信息

onActivityCreated()

 // for adapter constructor 
     tf = Typeface.createFromAsset(getActivity().getAssets(), 
      "fonts/listitemfont.ttf"); 


    LayoutInflater inflater = getActivity().getLayoutInflater(); 

    ViewGroup header = (ViewGroup) inflater.inflate(
      R.layout.profile_header, listView, false); 

    listView = getListView(); 
    listView.addHeaderView(header, null, false); 

      // stuff like settings up buttons inside header 

      // just before end of `onActivityCreated()` 

     if (endlessAdapter == null) { 
      if (getActivity() != null) { 

      profileList = new ArrayList<ProfileReview>(); 
      endlessAdapter = new EndlessProfileAdapter(getActivity(), 
        profileList, tf); 
      endlessAdapter.setRunInBackground(false); 
      listView.setAdapter(endlessAdapter); 
     } 
    } 
+0

將代碼發佈到您正在創建'EndlessAdapter'並設置標題視圖的地方。 – CommonsWare 2013-04-23 10:54:14

+0

@CommonsWare我更新了你所要求的信息的問題! – KickingLettuce 2013-04-23 14:52:06

回答

1

EndlessAdapter不能支持頁眉或頁腳視圖。在使用頁眉或頁腳視圖時創建的HeaderListViewAdapter對底層適配器進行了一些假設,但對於EndlessAdapter並不總是如此。

我已更新EndlessAdapter文檔以指出限制。

+0

好吧,夠好。我以爲我在某處閱讀有「MergeAdapter」的解決方案?我想這與其他事情有關。 – KickingLettuce 2013-04-23 15:10:14

+0

@KickingLettuce:'MergeAdapter' * *可以和'EndlessAdapter'一起工作。如果不是這樣,我更有可能修復這個問題。 – CommonsWare 2013-04-23 15:28:45

+0

因此,沒有解決方案/解決方法來將一些標題視圖與無盡的適配器?我需要這麼多。 – 2013-09-10 17:14:56

相關問題