Android 开发 AutoCompleteTextView结合自定义的适配器,查询数据库

本文介绍如何为AutoCompleteTextView创建自定义适配器,该适配器继承BaseAdapter并实现了Filterable接口,通过数据库查询实现过滤功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里没有用CursorAdapter,而是自己继承BaseAdapter写了个适配器.
与ListView不同,AutoCompleteTextView的适配器除了继承BaseAdapter外,还要实现Filterable接口。Filterable接口中有个getFilter方法,用于获取过滤器,我们需要自己写个继承Filter的过滤器,实现数据库查询。
代码使用了androidannotations.

 
  1. import java.util.ArrayList;
  2. import java.util.List;
  3.  
  4. import android.content.Context;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.BaseAdapter;
  9. import android.widget.Filter;
  10. import android.widget.Filterable;
  11. import android.widget.ImageView;
  12. import android.widget.TextView;
  13. import cn.jtang.discussion.R;
  14. import cn.jtang.discussion.db.UserDB;
  15. import cn.jtang.discussion.mode.User;
  16.  
  17. import com.googlecode.androidannotations.annotations.Bean;
  18. import com.googlecode.androidannotations.annotations.EBean;
  19. import com.googlecode.androidannotations.annotations.RootContext;
  20.  
  21. @EBean
  22. public class LoginUsernameAdapter extends BaseAdapter implements Filterable {
  23. LayoutInflater mInflater;
  24. ArrayList<User> users;
  25. String key;
  26. @RootContext
  27. Context context;
  28. @Bean
  29. UserDB userDb;
  30. DBFilter filter;
  31. @Override
  32. public int getCount() {
  33. // TODO Auto-generated method stub
  34. if (users != null && users.size() > 0) {
  35. return users.size();
  36. }
  37. return 0;
  38. }
  39.  
  40. @Override
  41. public Object getItem(int position) {
  42. // TODO Auto-generated method stub
  43. return users.get(position);
  44. }
  45.  
  46. @Override
  47. public long getItemId(int position) {
  48. // TODO Auto-generated method stub
  49. return position;
  50. }
  51.  
  52. @Override
  53. public View getView(final int position, View convertView, ViewGroup parent) {
  54. // TODO Auto-generated method stub
  55. if (mInflater == null) {
  56. mInflater = LayoutInflater.from(context);
  57. }
  58. final User user = users.get(position);
  59.  
  60. View view = mInflater.inflate(R.layout.item_actv_username, null);
  61. TextView tv_username = (TextView) view.findViewById(R.id.tv_username);
  62. tv_username.setText(user.getUsername());
  63. ImageView iv_delete = (ImageView) view.findViewById(R.id.iv_delete);
  64. //添加点击事件
  65. iv_delete.setOnClickListener(new View.OnClickListener() {
  66. @Override
  67. public void onClick(View v) {
  68. // TODO Auto-generated method stub
  69. //点击后删除用户
  70. userDb.deleteUser(user);
  71. users.remove(position);
  72. notifyDataSetChanged();
  73. }
  74. });
  75. return view;
  76. }
  77. /**
  78. * 获取过滤器
  79. */
  80. @Override
  81. public Filter getFilter() {
  82. // TODO Auto-generated method stub
  83. if (filter == null) {
  84. filter = new DBFilter();
  85. }
  86. return filter;
  87. }
  88.  
  89. /**
  90. * 数据库查询过滤器
  91. *
  92. * @author Administrator
  93. *
  94. */
  95. private class DBFilter extends Filter {
  96. /**
  97. * 查询数据库
  98. */
  99. @Override
  100. protected FilterResults performFiltering(CharSequence prefix) {
  101. // TODO Auto-generated method stub
  102. //查询结果保存到FilterResults对象里
  103. FilterResults results = new FilterResults();
  104. List<User> queryUsers = userDb.query(prefix.toString());
  105. results.values = queryUsers;
  106. results.count = queryUsers.size();
  107. return results;
  108. }
  109.  
  110. /**
  111. * 更新UI
  112. */
  113. @Override
  114. protected void publishResults(CharSequence constraint, FilterResults results) {
  115. // TODO Auto-generated method stub
  116. List<User> queryUsers = (List<User>) results.values;
  117. //把结果读取出复制到users里
  118. if (users == null) {
  119. users = new ArrayList<User>();
  120. }
  121. if (users.size() > 0) {
  122. users.clear();
  123. }
  124.  
  125. if (queryUsers != null && queryUsers.size() > 0)
  126. for (User user : queryUsers) {
  127. users.add(user);
  128. notifyDataSetChanged();
  129. }
  130. }
  131.  
  132. }
  133. }
  134.  

© 2013, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值