2016-04-28 20 views
0

我得到java.lang.IndexOutOfBoundsException:索引2无效,当我到达最后一页并尝试从列表视图中删除页脚视图时,大小为2。有人可以帮我解决这个问题。如何在Android分页完成后从listview中删除foorterview?

这里是添加页脚视图到列表视图的代码。

listView = (ListView)findViewById(R.id.listview_AllPost); 
     footer = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.prohressbar, listView, false); 
     rLayout = (RelativeLayout) footer.findViewById(R.id.progressRel); 
     progressBar = (ProgressBar) footer.findViewById(R.id.progressBar); 
     btnLoadMore = (Button) footer.findViewById(R.id.btnLoadMore); 
     btnLoadMore.getLayoutParams().height = 0; 
     progressBar.getLayoutParams().height = 130; 
     btnLoadMore.setVisibility(View.GONE); 
     progressBar.setVisibility(View.VISIBLE); 

这是我的分页方法。

filter_list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
         String selectedFromList = (filter_list.getItemAtPosition(position).toString()); 

         if (selectedFromList.equals("My Post")) { 
          populate_MyAllPostList(OFFSET); 
          btnLoadMore.setVisibility(View.GONE); 
          LoginUser_PostLoacalPages(); 
         } 
         if (selectedFromList.equals("All Post")) { 
          populateList(OFFSET); 
          progressBar.setVisibility(View.VISIBLE); 
          Pegination(); 

         } 
         if (selectedFromList.equals("R-Post")) { 
          populate_StarPost(OFFSET); 
          progressBar.setVisibility(View.VISIBLE); 
          R_Post_Pagination(); 
         }  } 
     }); 

这是我的分页代码。

public void LoginUser_PostLoacalPages() { 

     listView.removeFooterView(footer); 
     listView.addFooterView(footer); 
     listView.setOnScrollListener(new AbsListView.OnScrollListener() { 
      private int total; 

      @Override 
      public void onScrollStateChanged(AbsListView absListView, int scrollState) { 
      } 

      @Override 
      public void onScroll(AbsListView absListView, int firstItem, int visibleItemCount, final int totalItems) { 

       total = firstItem + visibleItemCount; 

       if (totalItems > 0 && total > 0 && total == totalItems) 
       { 
        if (preLast != total) 
        { 
         if (pageCount < MyPost_LocalPages) 
         { 
          Handler handler = new Handler(); 
          handler.postDelayed(new Runnable() 
          { 
           public void run() { 
            pageCount++; 
            int OFFSET_SCROLL = 50; 
            List<All_Post> allDesc = dbhelper.getMyAllPost(str_LoginUserId, OFFSET_SCROLL); 
            for (All_Post all_Post : allDesc) { 

             descArray.add(all_Post); 
            } 
            if (adapter != null) { 
             adapter.notifyDataSetChanged(); 
             listView.setAdapter(adapter); 
             listView.setSelection(totalItems); 
            } 
           } 
          }, 2500); 
         } 
         preLast = total; 

        } 

        preLast = total; 

        if (pageCount == MyPost_LocalPages) 
        { 
         if (preLast == total) 
         { 
          Log.e("", "pageCount preLast=" + pageCount + " MyPost_LocalPages=" + MyPost_LocalPages); 
          listView.removeFooterView(footer); 
          pageCount = 0; 
         } 
        } 
       } 
      } 
     }); 
    } 




public void R_Post_Pagination() 
    { 
     listView.removeFooterView(footer); 
     btnLoadMore.setVisibility(View.GONE); 
     listView.addFooterView(footer); 

     listView.setOnScrollListener(new AbsListView.OnScrollListener() { 
      private int total; 

      @Override 
      public void onScrollStateChanged(AbsListView absListView, int scrollState) { 
      } 

      @Override 
      public void onScroll(AbsListView absListView, int firstItem, int visibleItemCount, final int totalItems) { 

       total = firstItem + visibleItemCount; 

       if (totalItems > 0 && total > 0 && total == totalItems) { 
        if (preLast != total) { 
         if (R_PageCount < R_Post_LocalPages) { 
          Handler handler = new Handler(); 
          handler.postDelayed(new Runnable() { 
           public void run() { 
            R_PageCount++; 


            int OFFSET_SCROLL = 50; 
            List<All_Post> allDesc = dbhelper.getMyAll_StarPost(OFFSET_SCROLL); 
            for (All_Post all_Post : allDesc) { 

             descArray.add(all_Post); 
            } 
            if (adapter != null) { 
             adapter.notifyDataSetChanged(); 
             listView.setAdapter(adapter); 
             listView.setSelection(totalItems); 
            } 
           } 
          }, 2500); 
         } 
         preLast = total; 

        } 

        preLast = total; 

        if (R_PageCount == R_Post_LocalPages) { 
         if (preLast == total) 
         { 
          Log.e("", "pageCount preLast=" + R_PageCount + " R_Post_LocalPages=" + R_Post_LocalPages); 
          listView.removeFooterView(footer); 
          R_PageCount = 0; 

         } 
        } 
       } 
      } 
     }); 
    } 

这里是日志猫的错误信息。

java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2 
      at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 
      at java.util.ArrayList.get(ArrayList.java:308) 
      at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164) 
      at android.widget.ListView.dispatchDraw(ListView.java:3334) 
      at android.view.View.draw(View.java:15364) 
      at android.widget.AbsListView.draw(AbsListView.java:4434) 
      at android.view.View.updateDisplayListIfDirty(View.java:14242) 
      at android.view.View.getDisplayList(View.java:14272) 
      at android.view.View.draw(View.java:15057) 
      at android.view.ViewGroup.drawChild(ViewGroup.java:3528) 
      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3322) 
      at android.view.View.draw(View.java:15364) 
      at android.view.View.updateDisplayListIfDirty(View.java:14242) 
      at android.view.View.getDisplayList(View.java:14272) 
      at android.view.View.draw(View.java:15057) 
      at android.view.ViewGroup.drawChild(ViewGroup.java:3528) 
      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3322) 
      at android.view.View.updateDisplayListIfDirty(View.java:14234) 
      at android.view.View.getDisplayList(View.java:14272) 
      at android.view.View.draw(View.java:15057) 
      at android.view.ViewGroup.drawChild(ViewGroup.java:3528) 
      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3322) 
      at android.view.View.updateDisplayListIfDirty(View.java:14234) 
      at android.view.View.getDisplayList(View.java:14272) 
      at android.view.View.draw(View.java:15057) 
      at android.view.ViewGroup.drawChild(ViewGroup.java:3528) 
      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3322) 
      at android.view.View.updateDisplayListIfDirty(View.java:14234) 
      at android.view.View.getDisplayList(View.java:14272) 
      at android.view.View.draw(View.java:15057) 
      at android.view.ViewGroup.drawChild(ViewGroup.java:3528) 
      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3322) 
      at android.view.View.updateDisplayListIfDirty(View.java:14234) 
      at android.view.View.getDisplayList(View.java:14272) 
      at android.view.View.draw(View.java:15057) 
      at android.view.ViewGroup.drawChild(ViewGroup.java:3528) 
      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3322) 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchDraw(PhoneWindow.java:2845) 
      at android.view.View.draw(View.java:15364) 
      at android.widget.FrameLayout.draw(FrameLayout.java:647) 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2824) 
      at android.view.View.updateDisplayListIfDirty(View.java:14242) 
      at android.view.View.getDisplayList(View.java:14272) 
      at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:267) 
      at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:273) 
      at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:312) 
      at android.view.ViewRootImpl.draw(ViewRootImpl.java:2852) 
      at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2689) 
      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2313) 
      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1251) 
      at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6438) 
      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:795) 
      at android.view.Choreographer.doCallbacks(Choreographer.java:598) 
      at android.view.Choreographer.doFrame(Choreographer.java:567) 
      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:781) 
      at android.os.Handler.handleCallback(Handler.java:810) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:189) 
      at android.app.ActivityThread.main(ActivityThread.java:5529) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:950) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745) 
+0

这是哪行HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164)? –

+0

listView.removeFooterView(footer);显示// Footer(禁止位置将抛出IndexOutOfBoundsException) 返回mFooterViewInfos.get(adjPosition - adapterCount).isSeableable;但不是在我的代码中的任何地方。我只是在logcat android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164)中的lerror行上点击它,并且它转到该headerViewListAdapter.java类 – jandroid

回答

1

,你可以随时删除这样

隐藏页脚再次使用这个

footer.setVisibility(View.GONE); 

显示页脚再次在任何时候使用这个

footer.setVisibility(View.VISIBLE); 
+0

感谢您的帮助。现在它的工作正常。非常感谢。 – jandroid

相关问题