AutoCompleteTextView实现自动提示搜索

AutoCompleteTextView自定义adapter实现位置不同item

效果图

这里写图片描述

package com.souche.fengchepro.ui.activity.workbench;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;

import com.souche.fengchepro.R;
import com.souche.fengchepro.widget.iconify.IconTextView;

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

/**
 * Created by meng on 15/6/11.
 */
public class AppraisalAutoTVAdapter extends BaseAdapter implements Filterable {
    private List<String> data;
    private ArrayList<String> unFilterData;
    private ArrayFilter mFilter;
    private Context context;

    public AppraisalAutoTVAdapter(Context context ,List<String> list) {
        this.data = list;
        this.context = context;
    }

    @Override
    public int getCount() {
        return data == null ? 1 : data.size() + 1;
    }

    @Override
    public Object getItem(int i) {
        return i;
    }

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

    @Override
    public View getView(int i, View convertView, ViewGroup viewGroup) {
        View customItemView = null;
        View endItemView = null;
        CustomHolder customHolder;
        EndHolder endHolder;
        LayoutInflater mLayoutInflater = LayoutInflater.from(context);
        int viewType = getItemViewType(i);
        if (viewType == 1) {
            endItemView = convertView;
            if (endItemView == null) {
                endHolder = new EndHolder();
                endItemView = mLayoutInflater.inflate(R.layout.list_appraisel_search_end, null);
                endHolder.clear_all = (TextView) endItemView.findViewById(R.id.clear_all);
                endHolder.delete = (IconTextView) endItemView.findViewById(R.id.delete);
                endItemView.setTag(endHolder);
            } else {
                System.out.println("firstItemView!=null ");
                System.out.println("111 getClass="+endItemView.getTag().getClass().toString());
                endHolder=(EndHolder) endItemView.getTag();
            }

            convertView = endItemView;
        } else {
            customItemView = convertView;
            if (customItemView == null) {
                customHolder = new CustomHolder();
                customItemView = mLayoutInflater.inflate(R.layout.list_appraisel_search, null);
                customHolder.tv_catch = (TextView) customItemView.findViewById(R.id.tv_catch);
                customItemView.setTag(customHolder);
            } else {
                System.out.println("customItemView!=null ");
                System.out.println("111 getClass="+customItemView.getTag().getClass().toString());
                customHolder=(CustomHolder) customItemView.getTag();
            }

            if (data!=null) {
                if (customHolder.tv_catch!=null) {
                    customHolder.tv_catch.setText(data.get(i));
                }
            }
            convertView =customItemView;
        }

        return convertView;
    }

    @Override
    public int getItemViewType(int position) {
        int type;
        if (data.size()  == position && data.size() != 0) {
            type = 1;
        } else {
            type = 0;
        }
        return type;
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public Filter getFilter() {
        if (mFilter == null) {
            mFilter = new ArrayFilter();
        }
        return mFilter;
    }

    private class ArrayFilter extends Filter {

        @Override
        protected FilterResults performFiltering(CharSequence prefix) {
            FilterResults results = new FilterResults();

            if (unFilterData == null) {
                unFilterData = new ArrayList<String>(data);
            }

            if (prefix == null || prefix.length() == 0) {
                ArrayList<String> list = unFilterData;
                results.values = list;
                results.count = list.size();
            } else {
                String prefixString = prefix.toString().toLowerCase();

                ArrayList<String> unfilteredValues = unFilterData;
                int count = unfilteredValues.size();

                ArrayList<String> newValues = new ArrayList<String>(count);

                for (int i = 0; i < count; i++) {
                    if (unfilteredValues.get(i) != null && unfilteredValues.get(i).startsWith(prefixString)) {
                        newValues.add(unfilteredValues.get(i));
                    }
                }

                results.values = newValues;
                results.count = newValues.size();
            }

            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint,
                                      FilterResults results) {
            //noinspection unchecked
            data = (List<String>) results.values;
            if (results.count > 0) {
                notifyDataSetChanged();
            } else {
                notifyDataSetInvalidated();
            }
        }
    }

    private static final class EndHolder {
        TextView clear_all;
        IconTextView delete;
    }

    private static final class CustomHolder {
        TextView tv_catch;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值