Java 筛选自定义适配器引发IndexOutOfBoundsException

Java 筛选自定义适配器引发IndexOutOfBoundsException,java,android,android-adapter,indexoutofboundsexception,Java,Android,Android Adapter,Indexoutofboundsexception,因此,我有一个自定义适配器,它扩展了ArrayAdapter。我正在尝试使用SearchView从我的 ArrayList,如果我输入第一个字母,它会被正确过滤,但当我输入第二个字母时,应用程序崩溃,出现IndexOutOfBounds异常 适配器已连接到ListView 适配器: 公共类SearchActivityAdapter扩展ArrayAdapter实现可过滤{ 语境; ArrayList视频列表; ArrayList filteredList; 公共SearchActivityAdap

因此,我有一个自定义适配器,它扩展了ArrayAdapter。我正在尝试使用SearchView从我的 ArrayList,如果我输入第一个字母,它会被正确过滤,但当我输入第二个字母时,应用程序崩溃,出现IndexOutOfBounds异常

适配器已连接到ListView

适配器:

公共类SearchActivityAdapter扩展ArrayAdapter实现可过滤{
语境;
ArrayList视频列表;
ArrayList filteredList;
公共SearchActivityAdapter(@NonNull上下文,ArrayList列表){
super(上下文、R.layout.search\u活动\u列表项);
this.context=上下文;
this.videoList=列表;
this.filteredList=视频列表;
}
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
视窗持有人\搜索视窗持有人;
if(convertView==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
convertView=充气机。充气(R.layout.search\u activity\u listitem,父项,false);
viewholder=新的viewholder\u搜索(convertView);
convertView.setTag(viewholder);
viewholder.image=convertView.findViewById(R.id.search\u view\u image);
viewholder.videoName=convertView.findViewById(R.id.search\u view\u textview);
}
否则{
viewholder=(viewholder_search)convertView.getTag();
}
Log.d(“位置设置值---”,String.valueOf(位置));
字符串名称=”;
name=filteredList.get(位置);
name=name.substring(name.lastIndexOf(“/”)+1);
viewholder.videoName.setText(名称);
滑翔
.与(上下文)
.asBitmap()
.centerCrop()
.load(filteredList.get(位置))
.into(viewholder.image);
返回视图;
}
@凌驾
public int getCount(){
返回videoList.size();
}
@非空
@凌驾
公共过滤器getFilter(){
返回新筛选器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults FilterResults=新的FilterResults();
if(constraint==null | | constraint.length()==0){
filterResults.count=filteredList.size();
filterResults.values=filteredList;
}
其他的
{
字符串查询=constraint.toString().toLowerCase();
列表结果=新建ArrayList();
for(字符串名称:filteredList){
字符串原始=名称;
字符串tempname=name.substring(name.lastIndexOf(“/”)+1);
tempname=tempname.toLowerCase();
if(tempname.contains(查询)){
结果:添加(原件);
}
}
filterResults.count=result.size();
filterResults.values=结果;
}
返回过滤器结果;
}
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
filteredList=(ArrayList)results.values;
Log.d(“过滤列表---”,String.valueOf(filteredList));
notifyDataSetChanged();
}
};
}
}
日志:

2020-11-30 01:16:01.115 29689-29689/com.testapp.test3 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.testapp.test3, PID: 29689
    java.lang.IndexOutOfBoundsException: Index: 10, Size: 10
        at java.util.ArrayList.get(ArrayList.java:437)
        at com.testapp.test3.SearchActivityAdapter.getView(SearchActivityAdapter.java:52)
        at android.widget.AbsListView.obtainView(AbsListView.java:2471)
        at android.widget.ListView.makeAndAddView(ListView.java:2052)
        at android.widget.ListView.fillDown(ListView.java:786)
        at android.widget.ListView.fillGap(ListView.java:750)
        at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5511)
        at android.widget.ListView.trackMotionScroll(ListView.java:1971)
        at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3723)
        at android.widget.AbsListView.onTouchMove(AbsListView.java:4158)
        at android.widget.AbsListView.onTouchEvent(AbsListView.java:3964)
        at android.view.View.dispatchTouchEvent(View.java:11840)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2994)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2659)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3000)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2673)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3000)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2673)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3000)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2673)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3000)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2673)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3000)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2673)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3000)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2673)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3000)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2673)
        at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:592)
        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1977)
        at android.app.Activity.dispatchTouchEvent(Activity.java:3405)
        at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
        at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:548)
        at android.view.View.dispatchPointerEvent(View.java:12095)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4966)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4761)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4259)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4329)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4287)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4429)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4295)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4486)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4259)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4329)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4287)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4295)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4259)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6854)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6828)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6783)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6966)
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:194)
        at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
2020-11-30 01:16:01.117 29689-29689/com.testapp.test3 E/AndroidRuntime:     at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:181)
        at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:6937)
        at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:6989)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:925)
        at android.view.Choreographer.doCallbacks(Choreographer.java:737)
        at android.view.Choreographer.doFrame(Choreographer.java:663)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:911)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:192)
        at android.app.ActivityThread.main(ActivityThread.java:6702)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:826)

如何修复此问题?

我不知道为什么,但问题是
ArrayAdapter
。 当我删除它并添加
BaseAdapter
时,它工作了

基本适配器代码:

公共类TestSearchActivityAdapter扩展BaseAdapter实现可过滤{
语境;
ArrayList视频列表;
ArrayList filteredList;
公共TestSearchActivityAdapter(上下文上下文,ArrayList列表){
this.context=上下文;
this.videoList=列表;
this.filteredList=视频列表;
}
@凌驾
public int getCount(){
返回filteredList.size();
}
@凌驾
公共对象getItem(int位置){
返回位置;
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗持有人\搜索视窗持有人;
if(convertView==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
convertView=充气机。充气(R.layout.search\u activity\u listitem,父项,false);
viewholder=新的viewholder\u搜索(convertView);
convertView.setTag(viewholder);
viewholder.image=convertView.findViewById(R.id.search\u view\u image);
viewholder.videoName=convertView.findViewById(R.id.search\u view\u textview);
}否则{
viewholder=(viewholder_search)convertView.getTag();
}
Log.d(“位置设置值---”,String.valueOf(位置));
字符串名称=”;
name=filteredList.get(位置);
name=name.substring(name.lastIndexOf(“/”)+1);
viewholder.videoName.setText(名称);
滑翔
.与(上下文)
.asBitmap()
.centerCrop()
.load(filteredList.get(位置))
.into(viewholder.image);
返回视图;
}
@凌驾
公共过滤器getFilter(){
返回新筛选器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults FilterResults=新的FilterResults();
if(constraint==null | | constraint.length()==0){
fi