[英]How can i add auto searchview with listview?
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. 我是android的新手,我拥有Listview,在其中添加了图像和简单文本,现在我想放置搜索视图或自动完成的文本视图工具,无论何时用户搜索项目用户都可以按输入文本获得项目。
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));
}
}
You should implement Filterable interface to your adapter. 您应该为适配器实现Filterable接口。 And create a Filter class to perform filtering according to your needs.
并创建一个Filter类来根据您的需要执行过滤。
Add filter method your ActorsListAdapter and pass input value to filter method : 将过滤器方法添加到ActorsListAdapter并将输入值传递给过滤器方法:
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())
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.