Codewaves / Sticky-Header-Grid

Sticky header grid layout manager for RecycleView
MIT License
116 stars 33 forks source link

java.lang.IndexOutOfBoundsException while performing search functionality #4

Closed Nik2505 closed 6 years ago

Nik2505 commented 6 years ago

Getting invalid section if I perform search on list. @Override public int getSectionItemCount(int section) { return size; } here section is getting more than sectioncount.

Codewaves commented 6 years ago

Please provide more info or example, how do you perform the search and who exactly throwing IndexOutOfBoundsException

Nik2505 commented 6 years ago

I have performed search filtering as per list header text and list item text. using...

ArrayList<ArrayList> mDataset = new ArrayList<>();

@Override public void afterTextChanged(Editable s) { String text = search.getText().toString().toLowerCase(Locale.getDefault()); if (mDataset.size() > 0) adapter.filter(text); }

Filter method inside adapter class.

public void filter(String charText) {
    charText = charText.toLowerCase(Locale.getDefault());
    mDataset.clear();
    if (charText.length() == 0) {
        mDataset.addAll(mDataset_copy);
    } else {

        for (int i = 0; i < mDataset_copy.size(); i++) {
            ArrayList<CustomClass> categoriesList = new ArrayList<>();
            ArrayList<CustomClass> mList = mDataset_copy.get(i);
            for (CustomClass wp : mList) {
                if (wp.getHeaderDate().toLowerCase(Locale.getDefault()).contains(charText) || wp.getListTitle().toLowerCase(Locale.getDefault()).contains(charText)) {
                    categoriesList.add(wp);
                }
            }
            if (categoriesList.size() > 0) {
                mDataset.add(categoriesList);
            }
        }
    }
    notifyDataSetChanged();
}

@Override
public int getSectionCount() {
    return mDataset.size();
}

@Override
public int getSectionItemCount(int section) {
    return mDataset.get(section).size();
}

Getting wrong section count at getSectionItemCount. If my mDataset.size() is 1 and It have 3 items then section index becomes 0 and then 1.

Log:

java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) at java.util.ArrayList.get(ArrayList.java:304) at com.example.ListAdapters.ListAdapter2.getSectionItemCount(ListAdapter2.java:70) at com.codewaves.stickyheadergrid.StickyHeaderGridLayoutManager.fillBottomRow(StickyHeaderGridLayoutManager.java:528) at com.codewaves.stickyheadergrid.StickyHeaderGridLayoutManager.onLayoutChildren(StickyHeaderGridLayoutManager.java:406) at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3312) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3844) at android.view.View.layout(View.java:14243) at android.view.ViewGroup.layout(ViewGroup.java:4490) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021) at android.view.View.layout(View.java:14243) at android.view.ViewGroup.layout(ViewGroup.java:4490) at android.widget.FrameLayout.onLayout(FrameLayout.java:448) at android.view.View.layout(View.java:14243) at android.view.ViewGroup.layout(ViewGroup.java:4490) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021) at android.view.View.layout(View.java:14243) at android.view.ViewGroup.layout(ViewGroup.java:4490) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021) at android.view.View.layout(View.java:14243) at android.view.ViewGroup.layout(ViewGroup.java:4490) at android.widget.FrameLayout.onLayout(FrameLayout.java:448) at android.view.View.layout(View.java:14243) at android.view.ViewGroup.layout(ViewGroup.java:4490) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1670) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1528) at android.widget.LinearLayout.onLayout(LinearLayout.java:1441) at android.view.View.layout(View.java:14243) at android.view.ViewGroup.layout(ViewGroup.java:4490) at com.example.SlideMenu.TouchDisableView.onLayout(TouchDisableView.java:57) at android.view.View.layout(View.java:14243) at android.view.ViewGroup.layout(ViewGroup.java:4490) at android.widget.FrameLayout.onLayout(FrameLayout.java:448) at android.view.View.layout(View.java:14243) at android.view.ViewGroup.layout(ViewGroup.java:4490) at android.widget.FrameLayout.onLayout(FrameLayout.java:448) at android.view.View.layout(View.java:14243) at android.view.ViewGroup.layout(ViewGroup.java:4490) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2230) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1994) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1181) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4942) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776) at android.view.Choreographer.doCallbacks(Choreographer.java:579) at android.view.Choreographer.doFrame(Choreographer.java:548) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762) at android.os.Handler.handleCallback(Handler.java:800) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5409) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606) at dalvik.system.NativeStart.main(Native Method)

Codewaves commented 6 years ago

You cannot use notifyDataSetChanged, use notifyAllSectionsDataSetChanged instead. Look at Usage list 5th line.