如何添加自动搜索查看列表视图用? [英] How can i add auto searchview with listview?

查看:129
本文介绍了如何添加自动搜索查看列表视图用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新来的机器人,我有列表视图中,我添加图像和简单的文字,现在我希望把搜索视图或自动填充文本视图工具,每当项目用户的用户搜索可以得到物品按输入文本。

I am new to android,I have Listview in which i added image and simple text now i want to put search view or autocomplete text view facility,whenever user search for item user can get items as per enter the text.

public class Actors extends Activity implements OnItemClickListener{

public static final String[] sightstitle = new String[] { "Ghoghla Beach Diu","Jallandhar Shrine", "Hoka Trees Diu","INS Khukhri Diu","Nagoa Beach Diu","Panikotha-Fortim Do Mar"};
public static final Integer[] sightimages = { R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};
public static final Integer[] sightimagearow = {R.drawable.arrow,R.drawable.arrow,R.drawable.arrow,R.drawable.arrow,R.drawable.arrow,R.drawable.arrow };


ListView listView;
List<RowItem> rowItems;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_view_mainmenu);

    rowItems = new ArrayList<RowItem>();
    for (int i = 0; i < sightstitle.length; i++) {
        RowItem item = new RowItem(sightimages[i], sightstitle[i],sightimagearow[i]);
        rowItems.add(item);
    }

    listView = (ListView) findViewById(R.id.list);
    CustomBaseAdapter adapter = new CustomBaseAdapter(this, rowItems);
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(this);

}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
    long id) {
    Toast toast = Toast.makeText(getApplicationContext(),
        "Item " + (position + 1) + ": " + rowItems.get(position),
        Toast.LENGTH_SHORT);
    toast.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);
    toast.show();


}
}

public class CustomBaseAdapter extends BaseAdapter{

Context context;
List<RowItem> rowItems;

public CustomBaseAdapter(Context context, List<RowItem> items) {
    this.context = context;
    this.rowItems = items;
}

/*private view holder class*/
private class ViewHolder {
    ImageView imageView;
    TextView txtTitle;
    //TextView txtDesc;
    ImageView imgarrow;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;

    LayoutInflater mInflater = (LayoutInflater)
        context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_item_main_menu, null);
        holder = new ViewHolder();
        //holder.txtDesc = (TextView) convertView.findViewById(R.id.desc);
        holder.txtTitle = (TextView) convertView.findViewById(R.id.title);
        holder.imageView = (ImageView) convertView.findViewById(R.id.img);
        holder.imgarrow=(ImageView)convertView.findViewById(R.id.sight_arrow_icon);
        convertView.setTag(holder);
    }
    else {
        holder = (ViewHolder) convertView.getTag();
    }

    RowItem rowItem = (RowItem) getItem(position);

    //holder.txtDesc.setText(rowItem.getDesc());
    holder.txtTitle.setText(rowItem.getTitle());
    holder.imageView.setImageResource(rowItem.getImageId());
    holder.imgarrow.setImageResource(rowItem.getImg());

    return convertView;
}

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

@Override
public Object getItem(int position) {
    return rowItems.get(position);
}

@Override
public long getItemId(int position) {
    return rowItems.indexOf(getItem(position));
}
}

推荐答案

添加过滤器的方法您ActorsListAdapter,并通过输入值过滤方式:

Add filter method your ActorsListAdapter and pass input value to filter method :

public class CustomBaseAdapter extends BaseAdapter {
    private Context context;
    private List<RowItem> filterData;
    private List<RowItem> listData;


    public CustomBaseAdapter(Context context,List<RowItem> listData) {
        this.context = context;
        this.listData=listData;
        filterData = new ArrayList<RowItem>();
        filterData.addAll(listData);
    }

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

    @Override
    public Object getItem(int position) {
        return filterData.get(position);
    }

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

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(R.layout.list_item_main_menu, null);
            holder.imageView = (ImageView) convertView.findViewById(R.id.img);
            holder.imgarrow = (ImageView) convertView.findViewById(R.id.sight_arrow_icon);
            holder.txtTitle = (TextView) convertView.findViewById(R.id.title);

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

        holder.txtTitle.setText(filterData.get(position).getTitle());
        holder.imageView.setImageResource(listData.get(position).getImageId());
        holder.imgarrow.setImageResource(listData.get(position).getImg());

        return convertView;
    }

    public void filter(String charText) {
        filterData.clear();
        if (charText.length() == 0) {
            filterData.addAll(listData);
        }else{
            for (RowItem rowItem: listData) {
                if (rowItem.getTitle().toLowerCase().startsWith(charText.toString().toLowerCase()))
                    filterData.add(rowItem);
            }
        }
        notifyDataSetChanged();
    }


    class ViewHolder{
        ImageView imageView;
        ImageView imgarrow;
        TextView txtTitle;
    }
}

如何申请过滤器:

How to apply filter :

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

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {
       adapter.filter(s.toString().trim())
    }
 });

这篇关于如何添加自动搜索查看列表视图用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆