2016-04-25 1 views
1

Я реализую разбивку на страницы со списком. Я пытаюсь добавить просмотр нижнего колонтитула при загрузке моих данных и удалении нижнего колонтитула в конце списка, когда он достигнет последней страницы на setOnScrollListener в конце списка. Но получение сбоя на последней странице вызывает проблему IndexOutOfBoundsException: неверный индекс 2 , размер 2java.lang.IndexOutOfBoundsException: Неверный индекс 2, размер 2 при удалении footerview в конце списка в Android?

Я добавляю footerview после инициализации списка по

ListView listView; 

int pageCount = 0; 
View footer;@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    listView = (ListView) findViewById(R.id.load); 

    // Add footer view 
    footer = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.prohressbar, null, false); 
    listView.addFooterView(footer); 

    List<All_Post> allDesc = dbhelper.getAllDescriptions(OFFSET); 
    for (All_Post all_Post : allDesc){ 
     descArray.add(all_Post); 
    } 

    if (adapter == null) { 
     adapter = new AllPostAdapter(this, R.layout.allpostlist, descArray); 
     listView.setAdapter(adapter); 
    } 
    if (adapter != null) { 
     adapter.notifyDataSetChanged(); 

     adapter = new AllPostAdapter(this, R.layout.allpostlist, descArray); 
     listView.setAdapter(adapter); 
     listView.invalidateViews(); 

     final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
     int item_position = sharedPreferences.getInt("item_position", 0); 
     listView.setSelection(item_position); 
    } 

    Pegination();  

А вот мой метод пагинации

public void Pegination() { 

     final int activityCount = sharedPreferences.getInt("ActivityListCount", 0); 
     Log.e("", "activityCount in Pegination method =" + activityCount); 

     listView.addFooterView(footer); 

     final Button btnLoadMore = new Button(this); 
     btnLoadMore.setText("Load More ...."); 

     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; 
       Log.e("", "total =" + total); 

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

            List<All_Post> allDesc = dbhelper.getAllDescriptions(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; 
         Log.e("", "11111111111 preLast=" + preLast); 
        } 

        preLast = total; 
        Log.e("", "222222222222222 preLast=" + preLast); 
        if (pageCount == LocalPages) 
        { 
         if (preLast == total) 
         { 
          if (activityCount == 200) 
          { 
           Log.e(" 11111 In btnLoadMore ", " ActivityListCount =" + activityCount); 
           Log.e("", "Go to else conditions --- 1 !!!!!! pageCount=" + pageCount + " LocalPages=" + LocalPages); 
           pageCount = 0; 

           listView.removeFooterView(footer); 
           listView.addFooterView(btnLoadMore); 
          } 
         } 
          if (activityCount < 200) { 
           Log.e(" 222222 In btnLoadMore ", " ActivityListCount =" + activityCount); 
           Log.e("", "Go to else conditions --- 2 !!!!!! pageCount=" + pageCount + " LocalPages=" + LocalPages); 
           pageCount = 0; 
           listView.removeFooterView(btnLoadMore); 


          } 
         } 


        } 
       } 
      } 

     }); 

    } 

Вот моя Log Cat информация об ошибке.

04-25 15:48:18.780 28787-28787/com.example.tazeen.classnkk E/﹕ total =137 
04-25 15:48:18.780 28787-28787/com.example.tazeen.classnkk E/﹕ 222222222222222 preLast=137 
04-25 15:48:18.781 28787-28787/com.example.tazeen.classnkk E/11111 In btnLoadMore﹕ ActivityListCount =200 
04-25 15:48:18.781 28787-28787/com.example.tazeen.classnkk E/﹕ Go to else conditions --- 1 !!!!!! pageCount=3 LocalPages=3 
04-25 15:48:18.785 28787-28787/com.example.tazeen.classnkk D/AndroidRuntime﹕ Shutting down VM 
04-25 15:48:18.788 28787-28787/com.example.tazeen.classnkk E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.tazeen.classnkk, PID: 28787 
    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) 

Может кто-то, пожалуйста, помогите мне решить эту проблему. Зачем нужен InvallidIndexOutOfBoundException.

+0

Почтовый код, где ur получает значение из массиваList. –

+0

Что такое переменная 'list' в цикле' for'? Это происходит от ниоткуда –

ответ

1

Значение индекса начинается с нуля. Итак, первый элемент массива/списка равен 0 e, второй - 1. Вы говорите, что у вас есть только два элемента, поэтому индекс 2 для 3-го элемента, которого у вас нет. Проверьте свой код и соблюдайте лимиты.

На этой линии Intead == использовать <:

if (totalItems > 0 && total > 0 && total < totalItems) { 

но проверять весь код слишком, чтобы найти еще один возможный erros.

+0

не работает. его добавляется непосредственно на последней странице. Я хочу добавить индикатор выполнения после 10 записей, а когда моя страница на последней странице в это время удалит индикатор выполнения и добавит дополнительную загрузку. – jandroid

Смежные вопросы