Gridview筛选器在android中不起作用

Gridview筛选器在android中不起作用,android,filter,Android,Filter,您好,下面的代码实现了搜索功能。Gridview用于显示网格布局。我的网格布局工作正常。在该网格中,我按名称搜索,但它不工作 例如,我有三个名字,分别是cardiology、Ent、Ortho如果我正在搜索或键入ca意味着给我一个确切的心脏病学。如果键入o意味着再次向我显示心脏病学,结果应该是Ortho 谁能帮我一下我哪里出了错 布局: <androidx.appcompat.widget.SearchView android:id="@

您好,下面的代码实现了搜索功能。Gridview用于显示网格布局。我的网格布局工作正常。在该网格中,我按名称搜索,但它不工作

例如,我有三个名字,分别是cardiology、Ent、Ortho如果我正在搜索或键入ca意味着给我一个确切的心脏病学。如果键入o意味着再次向我显示心脏病学,结果应该是Ortho

谁能帮我一下我哪里出了错

布局:

 <androidx.appcompat.widget.SearchView
                    android:id="@+id/search"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:queryHint="Search By Speciality"
                    android:iconifiedByDefault="false"
                    app:searchHintIcon="@drawable/ic_baseline_search_24"
                    app:searchIcon="@drawable/ic_baseline_search_24"
                    android:textSize="18sp"
                    android:inputType="text"
                    app:closeIcon="@drawable/ic_baseline_close_24"
                    android:background="@drawable/rectangle_border"
                    android:textColor="@color/black" />
适配器:

public class SpeclializationAdapter extends BaseAdapter implements Filterable {

private Context mContext;
private ArrayList<DataList> doctorListModels;
private ArrayList<DataList> completeList;
private SpeclializationAdapter.MyItemClickListener clickListener;
private DoctorAdapter.SelectIemClickListner selectIemClickListner;
public SpeclializationAdapter(Context context, ArrayList<DataList> doctorListModels, MyItemClickListener clickListener){
    mContext=context;
    this.doctorListModels=doctorListModels;
    this.clickListener=clickListener;
    this.completeList=doctorListModels;
    this.completeList = new ArrayList<DataList>();
    this.completeList.addAll(doctorListModels);
}



@Override
public int getCount() {
    return doctorListModels.size();
}

@Override
public Object getItem(int position)
{

    return position;
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View gridView = null;
    final ImageView speclialistimage;
    final TextView specialization;
    final LinearLayout speclist;

    if (convertView == null) {
        gridView = new View(mContext);
        convertView=inflater.inflate(R.layout.speclialist, null);
        speclialistimage=convertView.findViewById(R.id.specilistimage);
        speclist=convertView.findViewById(R.id.speclist);
        specialization=convertView.findViewById(R.id.specialization);
        specialization.setText(doctorListModels.get(position).getSpecialization());
        // specialization.setText(speclistListFiltered.get(position).getSpecialization());
         final String specliality_name=doctorListModels.get(position).getSpecialization();
         if(specliality_name.equals("Cardiology")){
             speclialistimage.setImageResource(R.drawable.cardiology);
         }
        if(specliality_name.equals("ENT specialist")){
            speclialistimage.setImageResource(R.drawable.neurology);
        }
        if(specliality_name.equals("Orthopedics")){
            speclialistimage.setImageResource(R.drawable.orthopedic);
        }

        final View finalGridView = gridView;
        convertView.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                speclialistimage.setBackgroundResource(R.drawable.like_button);
                clickListener.myItemClick(position);
            }
        });
    }
    return convertView;
}

@Override
public Filter getFilter() {
    Filter filter=new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults filterResults=new FilterResults();
            ArrayList<DataList> searchResult = new ArrayList<DataList>();
            if (constraint != null && constraint.length() > 0) {
                constraint = constraint.toString().toUpperCase();
                for (int i = 0; i < completeList.size(); i++) {
                    if (completeList.get(i).getSpecialization().toUpperCase().contains(constraint)) {
                        DataList d = new DataList(completeList.get(i).getSpecialization());
                        searchResult.add(d);
                    }
                }

            } else {
                searchResult.addAll(completeList);
            }
            filterResults.count = searchResult.size();
            filterResults.values = searchResult;
            return filterResults;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults filterResults) {
            doctorListModels= (ArrayList<DataList>) filterResults.values;
            notifyDataSetChanged();
        }
    };
    return filter;
}

public interface MyItemClickListener{
    void myItemClick(int position);


}
公共类SpeclializationAdapter扩展BaseAdapter实现可过滤{
私有上下文;
私有ArrayList doctorListModels;
私人ArrayList completeList;
private SpeclializationAdapter.MyItemClickListener clickListener;
private doctor adapter.SelectIemClickListner SelectIemClickListner;
公共SpecializationAdapter(上下文上下文、ArrayList doctorListModels、MyItemClickListener clickListener){
mContext=上下文;
this.doctorListModels=doctorListModels;
this.clickListener=clickListener;
this.completeList=doctorListModels;
this.completeList=新的ArrayList();
this.completeList.addAll(doctorListModels);
}
@凌驾
public int getCount(){
返回doctorListModels.size();
}
@凌驾
公共对象getItem(int位置)
{
返回位置;
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)mContext
.getSystemService(上下文布局\充气机\服务);
视图gridView=null;
最终图像视图speclialistimage;
最终文本视图专门化;
最终线性布局规范清单;
if(convertView==null){
gridView=新视图(mContext);
convertView=充气机。充气(R.layout.speclialist,null);
speclialistimage=convertView.findViewById(R.id.specilistimage);
speclist=convertView.findviewbyd(R.id.speclist);
专门化=convertView.findViewById(R.id.specialization);
setText(doctorListModels.get(position.getSpecialization());
//specialization.setText(specListFiltered.get(position.getSpecialization());
最终字符串speciality_name=doctorListModels.get(position.getSpecialization();
if(特殊性名称等于(“心脏病学”)){
setImageResource(R.drawable.cardiology);
}
if(专业名称等于(“耳鼻喉科专家”)){
speclialistimage.setImageResource(R.drawable.neurology);
}
if(特殊性名称等于(“整形外科”)){
speclialistimage.setImageResource(R.drawable.Orthopedical);
}
最终视图finalGridView=gridView;
convertView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
speclialistimage.setBackgroundResource(R.drawable.like_按钮);
clickListener.myItemClick(位置);
}
});
}
返回视图;
}
@凌驾
公共过滤器getFilter(){
过滤器过滤器=新过滤器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults FilterResults=新的FilterResults();
ArrayList searchResult=新建ArrayList();
if(constraint!=null&&constraint.length()>0){
constraint=constraint.toString().toUpperCase();
对于(int i=0;i

}

你把参考资料搞砸了。现在,您的
ArrayList
specialistListFiltered
doctorListModels
都指向同一对象。因此,对其中一个进行任何修改都会影响到这两个方面

其中,一个列表应包含所有项,另一个列表应包含过滤项,并且只有过滤列表将与适配器一起使用

private ArrayList<DataList> doctorListModels;
private ArrayList<DataList> completeList;
public SpeclializationAdapter(Context context, ArrayList<DataList> doctorListModels, MyItemClickListener clickListener){
    mContext=context;
    this.doctorListModels=doctorListModels;
    this.clickListener=clickListener;
    this.completeList = new ArrayList<DataList>();
    this.completeList.addAll(doctorListModels)
}

PS您应该已经在使用
RecyclerView
而不是
GridView
ListView
GridView
现在都是旧式产品。

应该可以使用。使用更新的答案并调试代码。如果我输入c表示列表为空,但我使用的是gridview,gridview列表是正确的,现在如果输入字母c,没有显示我的gridview,请看一看,我不会说这个问题
在Android中不起作用
hehe])数百万人使用它ok。
private ArrayList<DataList> doctorListModels;
private ArrayList<DataList> completeList;
public SpeclializationAdapter(Context context, ArrayList<DataList> doctorListModels, MyItemClickListener clickListener){
    mContext=context;
    this.doctorListModels=doctorListModels;
    this.clickListener=clickListener;
    this.completeList = new ArrayList<DataList>();
    this.completeList.addAll(doctorListModels)
}
protected FilterResults performFiltering(CharSequence constraint) {
    FilterResults filterResults=new FilterResults();
    ArrayList<DataList> searchResult = new ArrayList<DataList>();
    if (constraint != null && constraint.length() > 0) {
        constraint = constraint.toString().toUpperCase();
        for (int i = 0; i < completeList.size(); i++) {
            if (completeList.get(i).getSpecialization().toUpperCase().contains(constraint)) {
                DataList d = new DataList(completeList.get(i).getSpecialization());
                searchResult.add(d);
            }
        }

    } else {
        searchResult.addAll(completeList);
    }
    filterResults.count = searchResult.size();
    filterResults.values = searchResult;
    return filterResults;
}