【问题标题】:ArrayAdapter: Searching for the class name itself and not the userArrayAdapter:搜索类名本身而不是用户
【发布时间】:2020-08-30 23:59:09
【问题描述】:

我有点困惑。许多教程展示了如何制作具有多个值的自定义 ArrayAdapter。你用你的值创建你自己的类,然后给 ArrayAdapter。

扩展 ArrayAdaper

但是,如果我这样做并在 customclass 中搜索我的值之一,它会搜索类名本身而不是实际用户 (app.playstore.uClimb.Adapters.Search.UserList@739acfa)。

这是我的 ArrayAdater 代码:

package app.playstore.uClimb.Adapters.Search;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.squareup.picasso.Picasso;

import java.util.ArrayList;
import java.util.List;

import app.playstore.uClimb.R;


public class Adapter_Spinner extends ArrayAdapter<UserList> {
    private static final String TAG = "Adapter_Spinner";

    List<UserList> objects;



    public Adapter_Spinner(Context context, int resource, List<UserList> objects) {
        super(context, resource, objects);
        this.objects = objects;

    }


    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        if (convertView == null) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.public_spinner_search_item, parent, false);
            convertView = view;
        }
        Log.d(TAG,"templist: " + objects);

        UserList userList = getItem(position);
        TextView txt = convertView.findViewById(R.id.spinner_search_txt);
        de.hdodenhof.circleimageview.CircleImageView circleImageView = convertView.findViewById(R.id.image_round_spinner_search);
        txt.setText((CharSequence) userList.getSecondValue());
        Picasso.get().load(userList.getThirdValue().toString()).fit().into(circleImageView);

        return convertView;
    }

    @NonNull
    @Override
    public Filter getFilter() {
        Filter myFilter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults filterResults = new FilterResults();
                ArrayList<String> tempList=new ArrayList<String>();
                //constraint is the result from text you want to filter against.
                //objects is your data set you will filter from
                if(constraint != null && objects!=null) {
                    int length=objects.size();
                    int i=0;
                    while(i<length){
                        String item=objects.get(i).getSecondValue();
                        //do whatever you wanna do here
                        //adding result set output array

                        tempList.add(item);

                        i++;
                    }
                    //following two lines is very important
                    //as publish result can only take FilterResults objects
                    filterResults.values = tempList;
                    filterResults.count = tempList.size();
                }
                return filterResults;
            }

            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence contraint, FilterResults results) {
                //objects = (ArrayList<UserList>) results.values;
                notifyDataSetChanged();
                clear();
                notifyDataSetInvalidated();
            }
        };
        return myFilter;
    }



    @Override
    public int getPosition(@Nullable UserList item) {
        return super.getPosition(item);
    }

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

这是我的课程代码:

package app.playstore.uClimb.Adapters.Search;

public class UserList {
    private String mFirstValue;
    private String mSecondValue;
    private String mThirdValue;


    public UserList(String firstvalue, String secondvalue,String thirdvalue) {
        mFirstValue = firstvalue;
        mSecondValue = secondvalue;
        mThirdValue = thirdvalue;
    }

    public String getFirstValue() {
        return mFirstValue;
    }

    public String getSecondValue() {
        return mSecondValue;
    }
    public String getThirdValue() {
        return mSecondValue;
    }
}

我搜索例如:T...O..M 什么也没有出现。但是,如果我搜索:a..p..p.. 项目出现。 很抱歉代码不整洁。

【问题讨论】:

    标签: android filter android-arrayadapter


    【解决方案1】:

    在片段或活动中过滤您的列表,然后在适配器中刷新列表

    public List<Item> list, filteredList;
    
    public void filter(String searchtext){
        if(!searchtext.isEmpty()){
            filteredList = new ArrayList<>();
            for(Item item: list){
                if(item.getValue().toLowerCase().contains(searchtext.toLowerCase())){
                    filteredDevices.add(item);
                }
            }
        }
        else{
            filteredList = list;
        }
    
        deviceAdapter.setList(filteredList);
        deviceAdapter.notifyDataSetChanged();
    }
    

    【讨论】:

    • 我会试试看:)
    猜你喜欢
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 2015-06-14
    • 2018-06-06
    • 2012-10-15
    • 1970-01-01
    相关资源
    最近更新 更多