android自定义列表视图搜索
我一直在尝试为我的自定义listview设置搜索功能。 尽管我试图遵循许多答案或教程,但我无法将它们反映到我的适配器类中。你能帮我设置搜索功能吗? 提前谢谢 主类android自定义列表视图搜索,android,listview,search,Android,Listview,Search,我一直在尝试为我的自定义listview设置搜索功能。 尽管我试图遵循许多答案或教程,但我无法将它们反映到我的适配器类中。你能帮我设置搜索功能吗? 提前谢谢 主类 public class Main_restaurant_list extends Activity { ArrayList < Restaurants > restaurantsList; RestaurantsAdapter adapter; ListView listview; Ed
public class Main_restaurant_list extends Activity {
ArrayList < Restaurants > restaurantsList;
RestaurantsAdapter adapter;
ListView listview;
EditText editsearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_restaurant_list);
editsearch = (EditText) findViewById(R.id.search);
listview = (ListView) findViewById(R.id.list);
restaurantsList = new ArrayList < Restaurants > ();
adapter = new RestaurantsAdapter(getApplicationContext(), R.layout.row_restaurant_list, restaurantsList);
listview.setAdapter(adapter);
editsearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
Main_restaurant_list.this.adapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}
@Override
public void afterTextChanged(Editable arg0) {}
});
公共类主餐厅列表扩展活动{
ArrayList<餐厅>餐厅列表;
餐厅适配器;
列表视图列表视图;
编辑文本编辑搜索;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局、主餐厅列表);
editsearch=(EditText)findViewById(R.id.search);
listview=(listview)findViewById(R.id.list);
restaurantsList=new ArrayList();
adapter=newrestaurantsapter(getApplicationContext(),R.layout.row\u restaurant\u list,restaurantsList);
setAdapter(适配器);
editsearch.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列cs、int arg1、int arg2、int arg3){
Main_restaurant_list.this.adapter.getFilter().filter(cs);
}
@凌驾
public void beforeTextChanged(字符序列arg0、int arg1、int arg2、int arg3){}
@凌驾
public void posterextchanged(可编辑arg0){}
});
适配器类
public class RestaurantsAdapter extends ArrayAdapter <Restaurants> implements Filterable {
ArrayList<Restaurants> restaurantList;
LayoutInflater vi;
int Resource;
ViewHolder holder;
public RestaurantsAdapter(Context context, int resource, ArrayList<Restaurants> objects) {
super(context, resource, objects);
vi = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Resource = resource;
restaurantList = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// convert view = design
View v = convertView;
if (v == null) {
holder = new ViewHolder();
v = vi.inflate(Resource, null);
holder.imageview = (ImageView) v.findViewById(R.id.ivImage);
holder.title = (TextView) v.findViewById(R.id.title);
holder.addr1 = (TextView) v.findViewById(R.id.addr1);
holder.addr2 = (TextView) v.findViewById(R.id.addr2);
holder.tel = (TextView) v.findViewById(R.id.tel);
/*holder.mapx = (TextView) v.findViewById(R.id.mapx);*/
/*holder.mapy = (TextView) v.findViewById(R.id.mapy);*/
/* holder.contentid = (TextView) v.findViewById(R.id.contentid);*/
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
//Restaurants listViewItem= filteredItemList.get(position);
holder.imageview.setImageResource(R.drawable.ic_launcher);
new DownloadImageTask(holder.imageview).execute(restaurantList.get(position).getImage());
holder.title.setText(restaurantList.get(position).gettitle());
holder.addr1.setText("주소: " + restaurantList.get(position).getaddr1());
holder.addr2.setText(restaurantList.get(position).getAddr2());
holder.tel.setText("전화: " + restaurantList.get(position).gettel());
/* holder.mapx.setText( actorList.get(position).getmapx());*/
/*holder.mapy.setText("mapx: " + actorList.get(position).getmapy());*/
/*holder.tvChildren.setText("mapy: " + actorList.get(position).getChildren());*/
return v;
}
static class ViewHolder {
public ImageView imageview;
public TextView title;
public TextView addr1;
public TextView addr2;
public TextView tel;
public TextView mapx;
public TextView mapy;
public TextView contentid;
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String...urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream( in );
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
}
公共类RestaurantAdapter扩展ArrayAdapter实现可过滤{
ArrayList餐厅列表;
拉平机vi;
智力资源;
视窗座;
公共餐厅适配器(上下文、int资源、ArrayList对象){
超级(上下文、资源、对象);
vi=(LayoutFlater)上下文
.getSystemService(上下文布局\充气机\服务);
资源=资源;
restaurantList=对象;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//转换视图=设计
视图v=转换视图;
如果(v==null){
holder=新的ViewHolder();
v=vi.充气(资源,空);
holder.imageview=(imageview)v.findViewById(R.id.ivImage);
holder.title=(TextView)v.findViewById(R.id.title);
holder.addr1=(TextView)v.findViewById(R.id.addr1);
holder.addr2=(TextView)v.findViewById(R.id.addr2);
holder.tel=(TextView)v.findviewbyd(R.id.tel);
/*holder.mapx=(TextView)v.findViewById(R.id.mapx)*/
/*holder.mapy=(TextView)v.findViewById(R.id.mapy)*/
/*holder.contentid=(TextView)v.findViewById(R.id.contentid)*/
v、 setTag(支架);
}否则{
holder=(ViewHolder)v.getTag();
}
//餐厅listViewItem=filteredItemList.get(位置);
holder.imageview.setImageResource(R.drawable.ic_启动器);
新建下载的ImageTask(holder.imageview).execute(restaurantList.get(position.getImage());
holder.title.setText(restaurantList.get(position.gettitle());
holder.addr1.setText(“주소: " + restaurantList.get(position.getaddr1());
holder.addr2.setText(restaurantList.get(position.getAddr2());
holder.tel.setText(“전화: “+restaurantList.get(position.gettel());
/*holder.mapx.setText(actorList.get(position.getmapx())*/
/*holder.mapy.setText(“mapx:+actorList.get(position.getmapy())*/
/*holder.tvChildren.setText(“mapy:+actorList.get(position.getChildren())*/
返回v;
}
静态类视窗夹{
公共影像视图;
公共文本视图标题;
公共文本视图addr1;
公共文本视图addr2;
公共文本视图电话;
公共文本视图mapx;
公共文本视图mapy;
公共文本视图contentid;
}
私有类DownloadImageTask扩展了AsyncTask{
图像视图bmImage;
公共下载ImageTask(ImageView bmImage){
this.bmImage=bmImage;
}
受保护位图doInBackground(字符串…URL){
字符串urldisplay=url[0];
位图mIcon11=null;
试一试{
InputStream in=newjava.net.URL(urldisplay.openStream();
mIcon11=BitmapFactory.decodeStream(in);
}捕获(例外e){
Log.e(“Error”,e.getMessage());
e、 printStackTrace();
}
返回mIcon11;
}
受保护的void onPostExecute(位图结果){
bmImage.setImageBitmap(结果);
}
}
}
您可以使用以下方法执行相同的操作
- 将SearchView.OnQueryTextListener实现到您的活动/片段
- 为您的活动创建菜单_activity.xml
public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_activity, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem searchItem = menu.findItem(R.id.action_search); searchView = (SearchView) MenuItemCompat.getActionView(searchItem); searchView.setOnQueryTextListener(this); searchView.setOnCloseListener(this); return super.onPrepareOptionsMenu(menu); } @Override public boolean onQueryTextChange(String query) { if (query.length() == 0) { searchView.setIconified(true); searchView.clearFocus(); searchView.setQueryHint("some_hint_text"); } else { ArrayList<Restaurants> items = SearchUtil.searchRestraunt(query); if (items != null && items.size() != 0) { Main_restaurant_list.this.adapter.swapData(items); } return false; } return false; }
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_activity, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem searchItem = menu.findItem(R.id.action_search);
searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(this);
searchView.setOnCloseListener(this);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onQueryTextChange(String query) {
if (query.length() == 0) {
searchView.setIconified(true);
searchView.clearFocus();
searchView.setQueryHint("some_hint_text");
} else {
ArrayList<Restaurants> items = SearchUtil.searchRestraunt(query);
if (items != null && items.size() != 0) {
Main_restaurant_list.this.adapter.swapData(items);
}
return false;
}
return false;
}
public boolean oncreateoptions菜单(菜单菜单){
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。菜单活动,菜单);
返回super.onCreateOptions菜单(菜单);
}
@凌驾
公共布尔值OnPrepareOptions菜单(菜单){
MenuItem searchItem=menu.findItem(R.id.action\u search);
searchView=(searchView)MenuItemCompat.getActionView(searchItem);
setOnQueryTextListener(这个);
searchView.setOnCloseListener(这个);
返回super.onPrepareOptions菜单(菜单);
}
@凌驾
公共布尔onQueryTextChange(字符串查询){
if(query.length()==0){
searchView.setIconified(true);
searchView.clearFocus();
setQueryHint(“一些提示文本”);
}否则{
arraylistitems=SearchUtil.searchrestarun(查询);
if(items!=null&&items.size()!=0){
主餐厅列表.this.adapter.swapData(