Closed Nik2505 closed 6 years ago
Please provide more info or example, how do you perform the search and who exactly throwing IndexOutOfBoundsException
I have performed search filtering as per list header text and list item text. using...
ArrayList<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)
You cannot use notifyDataSetChanged, use notifyAllSectionsDataSetChanged instead. Look at Usage list 5th line.
Getting invalid section if I perform search on list. @Override public int getSectionItemCount(int section) { return size; } here section is getting more than sectioncount.