如何调整ListView的搜索过滤器,其中的项目是每个对象包含2个字符串的对象? 不是每个项目1个字符串

问题描述

我有一个用arrayList finalArray实现的ListView。 finalArray项是object,每个对象 由两个TwxtViews组成-瑞典语单词及其英语翻译 (全部取自2个arrayLists-swedishPractice和englishPractice)。

我已将EditText设置为Filter,以便通过ListView进行搜索, 但是当我在过滤器中键入任何东西时,所有项目将从 屏幕上没有任何内容(而必须保留匹配项)。

为什么如此以及如何进行比赛? (当我使用包含以下内容的对象制作ListView 只有1个TextView,一切正常。)

这就是创建Word对象的方式:

public class Word {

    private String swedish;
    private String english;

    public Word(String swedish,String english) {
        this.swedish = swedish;
        this.english = english;
    }

    public String getSwedish() {
        return swedish;
    }

    public void setSwedish(String swedish) {
        this.swedish = swedish;
    }

    public String getEnglish() {
        return english;
    }

    public void setEnglish(String english) {
        this.english = english;
    }
}

这就是我制作ListView的方式:

ListView mListView = (ListView) findViewById(R.id.switchList);
        EditText theFilter = (EditText) findViewById(R.id.searchFilter);
        Log.d(TAG,"onCreate: Started");

        ArrayList<Word> finalArray = new ArrayList<Word>();
        for (int i = 0; i < Practice.swedishPractice.size(); i++) {
            finalArray.add(new Word(Practice.swedishPractice.get(i),Practice.englishPractice.get(i)));
        }

        adapter = new Checklistadapter(this,R.layout.list_item_layout,finalArray,this);
        mListView.setAdapter(adapter);


        theFilter.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s,int start,int count,int after) {

            }

            @Override
            public void onTextChanged(CharSequence s,int before,int count) {
                (ViSAEj.this).adapter.getFilter().filter(s);
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

这是它的适配器(以防万一,您需要查看它才能给出答案) (在单独的课程中制作):

public class Checklistadapter extends ArrayAdapter<Word> {

    private static final String TAG = "Checklistadapter";

    private Context mContext;
    private int mResource;
    private int lastPosition = -1;

    /**
     * Hold variables in a view
     */

    static class ViewHolder {
        TextView swedish;
        TextView english;
    }

    /**
     * Default constructor for the Checklistadapter
     * @param context
     * @param resource
     * @param objects
     */

    public Checklistadapter(@NonNull Context context,int resource,@NonNull ArrayList<Word> objects,Context mContext) {
        super(context,resource,objects);
        this.mContext = mContext;
        mResource = resource;
    }

    @NonNull
    @Override
    public View getView(int position,@Nullable View convertView,@NonNull ViewGroup parent) {

        //get the word two examples
        String swedish = getItem(position).getSwedish();
        String english = getItem(position).getEnglish();

        //create the word object with two examples
        Word word = new Word(swedish,english);

        //create the view result for showing the animation
        final View result;

        //Viewholder object
        ViewHolder holder;

        if (convertView == null) {

            LayoutInflater inflater = LayoutInflater.from(mContext);
            convertView = inflater.inflate(mResource,parent,false);
            holder = new ViewHolder();
            holder.swedish = (TextView) convertView.findViewById(R.id.textView1);
            holder.english = (TextView) convertView.findViewById(R.id.textView2);

            result = convertView;

            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
            result = convertView;
        }

        Animation animation = AnimationUtils.loadAnimation(mContext,(position > lastPosition) ? R.anim.loading_down_anim : R.anim.loading_up_anim);
        result.startAnimation(animation);
        lastPosition = position;

        holder.swedish.setText(word.getSwedish());
        holder.english.setText(word.getEnglish());

        return convertView;
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)