当前位置: 代码迷 >> Android >> android开发札记-EditText自动补全功能(转)
  详细解决方案

android开发札记-EditText自动补全功能(转)

热度:113   发布时间:2016-05-01 20:41:44.0
android开发笔记-EditText自动补全功能(转)

精创之作《雷神的微软平台安全宝典》诚邀译者????????????????????????????????????????????移动业界领袖会议·上海·6.20?
CSDN博客频道“移动开发之我见”主题征文活动?????????【分享季1】:网友推荐130个经典资源,分享再赠分!
?

Android开发笔记-EditText自动补全功能

分类:?android?8人阅读?评论(0)?收藏?举报

项目开发之需要, 根据用户拼音或代码检索出用户信息. 现在有两种方法可以实现.

1. 使用android系统自带组件:?AutoCompleteTextView .

效果图如下:

布局文件:

auto_textview.xml

?

Xml代码??收藏代码
  1. <?xml?version="1.0"?encoding="utf-8"?>??
  2. <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  3. ????android:orientation="vertical"??
  4. ????android:layout_width="fill_parent"??
  5. ????android:layout_height="fill_parent"??
  6. ????>??
  7. ??
  8. ?????<TextView?android:id="@+id/selection6"??
  9. ????????android:layout_width="fill_parent"??
  10. ????????android:layout_height="wrap_content"???/>???
  11. ?????<AutoCompleteTextView?android:id="@+id/editAuto"??
  12. ????????android:layout_width="fill_parent"??
  13. ????????android:layout_height="wrap_content"??
  14. ????????android:completionThreshold?="1"?/>??
  15. ??
  16. </LinearLayout>??
?

?

?2. java代码:

public class AutoComplementTest extends Activity {

Java代码??收藏代码
  1. ????private?AutoCompleteTextView?edit;??
  2. ????private?String[]??items={"lorem",?"ipsum",?"dolor",?"sit",?"amet",?"consectetuer",?"adipiscing",?"elit",?"morbi",?"vel",?"ligula",?"vitae",?"arcu",?"aliquet",?"mollis",?"etiam",?"vel",?"erat",?"placerat",?"ante",?"porttitor",?"sodales",?"pellentesque",?"augue",?"purus"};???
  3. ??????
  4. ??????
  5. ????@Override??
  6. ????protected?void?onCreate(Bundle?savedInstanceState)?{??
  7. ??????????
  8. ????????super.onCreate(savedInstanceState);??
  9. ??????????
  10. ????????setContentView(R.layout.auto_textview);??
  11. ????????edit?=?(AutoCompleteTextView)findViewById(R.id?.editAuto);??
  12. ????????//步骤1:设置适配器???
  13. ????????edit.setAdapter?(new?ArrayAdapter<String>(this?,android.R.layout.simple_dropdown_item_1line?,items?));??
  14. ????????
  15. ????}???
  16. ??
  17. }??

?

此法的弊端: 不能根据字母拼音或代码检索, 只能根据返回的值自动补全, 拓展性不全.

?

?

方法二:

EditText和ListView组合成类似自动补全功能.

?

效果图如下:

?

?

布局文件代码:

?

Xml代码??收藏代码
  1. <EditText?android:id="@+id/edit_key"??
  2. ????????????????????????????android:layout_width="fill_parent"??
  3. ????????????????????????????android:layout_height="32dip"??
  4. ????????????????????????????android:layout_marginLeft="2dip"??
  5. ????????????????????????????android:layout_marginTop="4dip"??
  6. ????????????????????????????android:layout_marginBottom="4dip"??
  7. ????????????????????????????android:paddingTop="8dip"??
  8. ????????????????????????????android:paddingBottom="4dip"??
  9. ????????????????????????????android:focusable="false"??
  10. ????????????????????????????android:layout_marginRight="12dip"??
  11. ????????????????????????????android:background="@drawable/qt_search_txt"??
  12. ????????????????????????????/>??
  13. ????????????????????????
  14. ??????????????????????????
  15. ????????????????????????<ListView?android:id="@+id/lstv_all"???
  16. ????????????????????????????android:layout_width="fill_parent"??
  17. ????????????????????????????android:layout_height="wrap_content"?/>??

?

java代码:

?

Java代码??收藏代码
  1. public?class?LoadableStockListActivity?extends?ListActivity{??
  2. ???
  3. ????private?StringBuffer?sb?=?new?StringBuffer();???
  4. ??????????
  5. ????private?EditText?txtKey;??
  6. ????private?ListView?listView;??
  7. ??????
  8. ??????
  9. ????@Override??
  10. ????protected?void?onCreate(Bundle?savedInstanceState)?{??
  11. ??????????
  12. ????????super.onCreate(savedInstanceState);??
  13. ????????requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);??
  14. ????????setContentView(R.layout.loadable_stock_list_activity);??
  15. ??????????
  16. ???????????
  17. ????????foursquared?=?((Foursquared)this.getApplication());??
  18. ???????????
  19. ????????mEmptyProgress?=?(ProgressBar)?findViewById(R.id.emptyProgress);??
  20. ????????mEmptyText?=?(TextView)?findViewById(R.id.emptyText);??
  21. ????????setLoadingView();???
  22. ??????????
  23. ???????????
  24. ????????txtKey?=?(EditText)findViewById(R.id.edit_key);???
  25. ???????????????????
  26. ????????listView?=?(ListView)findViewById(R.id.lstv_all);??
  27. ????????//添加文本改变事件??
  28. ????????txtKey.addTextChangedListener(new?TextWatcher()?{??
  29. ????????????@Override??
  30. ????????????public?void?onTextChanged(CharSequence?s,?int?start,?int?before,?int?count)?{??
  31. ??????????????????
  32. ????????????????key?=??txtKey.getText().toString();??
  33. ????????????????if(key!=null?&&?!"".equals(key.trim())){??
  34. ????????????????????Log.i(TAG?,?"?key:"+key);??
  35. ????????????????????List<Map<String?,?String>>?lst?=?foursquared.getSelectStock(key);//根据关键字查询股票代码??
  36. ????????????????????StockListAdapter?stockAdapter?=?new?StockListAdapter(LoadableStockListActivity.this?,?lst);??
  37. ????????????????????listView.setAdapter(stockAdapter);??
  38. ????????????????}else{??
  39. ????????????????????listView.setAdapter(null);??
  40. ????????????????}??
  41. ????????????}??
  42. ??????????????
  43. ????????????@Override??
  44. ????????????public?void?beforeTextChanged(CharSequence?s,?int?start,?int?count,??
  45. ????????????????????int?after)?{??
  46. ????????????}??
  47. ??????????????
  48. ????????????@Override??
  49. ????????????public?void?afterTextChanged(Editable?s)?{??
  50. ??????????????????
  51. ????????????}??
  52. ????????});??
  53. ??????????
  54. ????????//查询所有股票相关数据??
  55. ????????List<Map<String?,?String>>?lst?=?foursquared.getSelectStock(null);??
  56. ????????//自定义ListView适配器??
  57. ????????StockListAdapter?stockAdapter?=?new?StockListAdapter(this?,?lst);??
  58. ????????//设置适配器??
  59. ????????listView.setAdapter(stockAdapter);??
  60. }??

?

??getSelectStock()方法详解:

Java代码??收藏代码
  1. /**?
  2. ?????*?获取股票代码信息列表?
  3. [email protected]?
  4. ?????*/??
  5. ????public?List<Map<String?,?String>>?getSelectStock(String?key){??
  6. ??????????
  7. ????????stockDB.open();??
  8. ????????List<Map<String?,?String>>?stocks?=?stockDB.selectStock(key);??
  9. ????????stockDB.close();??
  10. ??????????
  11. ????????return?stocks;??
  12. ??????????
  13. ????}??
  14. ??
  15. ??
  16. selectStock()方法详解:(欲了解stockDB具体代码,请参考:?上篇:android开发笔记-sqllite操作)??
  17. ??
  18. public?List<Map<String?,?String>>?selectStock(String?key){??
  19. ??????????
  20. ????????if(!db.isOpen()){??
  21. ????????????db?=?dbHelper.getReadableDatabase();??
  22. ????????}??
  23. ??????????
  24. ????????List<Map<String?,?String>>?stockList?=?new?ArrayList<Map<String?,?String>>();??
  25. ??????????
  26. ????????Cursor?cur?=?null;??
  27. ??????????
  28. ????????if(null!=key?&&?!"".equals(key)){??
  29. ??
  30. ????????????//查询的列字段名??
  31. ????????????String?[]?columns?=?{CODE?,?NAME?,?SIMPLE};??
  32. ????????????//查询条件??
  33. ????????????String?where?=??CODE+?"?like???or?"+NAME+"?like???or?"+SIMPLE+"?like???";??
  34. ????????????//查询参数??
  35. ????????????String?[]?selectArgs?=?{key+"%"?,?key+"%"?,?key+"%"};???
  36. ????????????//执行查询??
  37. ????????????cur?=?db.query(DATABASE_TABLE,?columns,?where?,?selectArgs,?null,?null,?null);??
  38. ??????????????
  39. ????????????cur.moveToFirst();??
  40. ????????????//循环读取数据??
  41. ????????????while(!cur.isAfterLast()){??
  42. ????????????????Map<String?,?String>?stockMap?=?new?HashMap<String?,?String>();??
  43. ????????????????String?code?=??cur.getString(0);??
  44. ????????????????String?name?=??cur.getString(1)+"("+code+")";??
  45. ????????????????stockMap.put("code"?,?code);??
  46. ????????????????stockMap.put("name"?,?name);??
  47. ????????????????stockList.add(stockMap);??
  48. ????????????????cur.moveToNext();??
  49. ????????????}??
  50. ????????????cur.close();??
  51. ????????????close();??
  52. ????????????return?stockList;??
  53. ????????}??
  54. ????????return?null;??
  55. ????} ?
  相关解决方案