ListView显示SQLite数据,EditText对数据检索。(全国城市名的显示和搜索)
2016-05-10 10:55
465 查看
呃,第一次写博客,没啥经验,大家将就的看看吧。
本人安卓/JAVA 小菜鸡,想做个ListView的搜索,看到了这位仁兄的博客,http://blog.csdn.net/ljd4305/article/details/39375163,大家可以去看看。然后寻思做个SQLite导入进来,搜索个城市列表吧。因为后头想做个简单的天气app,就蛮做一下这个了。发现网上也没有详细例子,那就自己试着写,写完本着写博客就是最好的笔记的精神,就发出来供大家参考参考。话不多说,贴代码吧。
下载地址:(原先的不知道为啥挂掉了)
工程文件
数据库文件
Oncreate函数里先用一个List Map对象mData 获取数据库的内容 来显示初始化界面
同时三个List String对象QuName ShiName ShengName 获取数据库里不同列的值 分别是2、4、6
数据库列值对应如下
获取数据库
遍历数据库,绑定
handler对象post的runnable
清空mData,判断QuName等三个List是否包含EditText的内容data
若EditText没有内容 则if语句一只成立 又重新的把全部省市区添加到mData中
本人安卓/JAVA 小菜鸡,想做个ListView的搜索,看到了这位仁兄的博客,http://blog.csdn.net/ljd4305/article/details/39375163,大家可以去看看。然后寻思做个SQLite导入进来,搜索个城市列表吧。因为后头想做个简单的天气app,就蛮做一下这个了。发现网上也没有详细例子,那就自己试着写,写完本着写博客就是最好的笔记的精神,就发出来供大家参考参考。话不多说,贴代码吧。
下载地址:(原先的不知道为啥挂掉了)
工程文件
数据库文件
public class MainActivity extends ActionBarActivity { EditText mEditText; ListView mListView; /** mData绑定Adapter用 QuName、ShiName、ShengName是将数据库里对应字段信息(省、市、区)按字符串输出 方便后头EditText里查找 */ ArrayList<HashMap<String, Object>> mData = new ArrayList<HashMap<String, Object>>(); ArrayList<String> QuName = new ArrayList<String>(); ArrayList<String> ShiName = new ArrayList<String>(); ArrayList<String> ShengName = new ArrayList<String>(); SimpleAdapter adapter; Handler mHandler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView = (ListView) findViewById(R.id.mListView); mEditText = (EditText) findViewById(R.id.mEditText); //打开数据库 通过Cursor.moveToNext方法来遍历数据库 SQLiteDatabase mDb = openOrCreateDatabase("cityname.db", SQLiteDatabase.CREATE_IF_NECESSARY, null); Cursor mCursor = mDb.rawQuery("select * from " + "t_city", null); while (mCursor.moveToNext()) { HashMap<String, Object> item = new HashMap<String, Object>(); item.put("name_qu", mCursor.getString(2)); QuName.add(mCursor.getString(2)); item.put("name_shi", mCursor.getString(4) + "市"); ShiName.add(mCursor.getString(4)+"市"); //直辖市,把name_sheng添加一个空的String if(("北京重庆天津上海").contains(mCursor.getString(6))){ item.put("name_sheng", ""); ShengName.add(""); } else{ item.put("name_sheng", mCursor.getString(6)+"省 "); ShengName.add(mCursor.getString(6) +"省 "); } mData.add(item); } adapter = new SimpleAdapter(this,mData,R.layout.item, new String[]{"name_sheng", "name_shi", "name_qu"}, new int[]{R.id.name_sheng, R.id.name_shi, R.id.name_qu}); mListView.setAdapter(adapter); mTextChanged(); mCursor.close(); } //对EditText的内容进行监听 //利用handler post一个runnable对象 //获取EditText内容 更新ListView private void mTextChanged() { mEditText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {} @Override public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {} @Override public void afterTextChanged(Editable s) { mHandler.post(editChanged); } }); } Runnable editChanged= new Runnable() { @Override public void run() { mData.clear(); String data = mEditText.getText().toString();//编辑框内容获取 int length = QuName.size(); for(int i = 0; i < length; i++){ HashMap<String,Object> item = new HashMap<String,Object>(); if(QuName.get(i).contains(data) || ShiName.get(i).contains(data) || ShengN b451 ame.get(i).contains(data)){ item.put("name_qu",QuName.get(i)); item.put("name_shi",ShiName.get(i)); item.put("name_sheng", ShengName.get(i)); mData.add(item); } } adapter.notifyDataSetChanged();//更新 } }; }
Oncreate函数里先用一个List Map对象mData 获取数据库的内容 来显示初始化界面
同时三个List String对象QuName ShiName ShengName 获取数据库里不同列的值 分别是2、4、6
数据库列值对应如下
0|AREAID|VARCHAR(10)|0||1 1|NAMEEN|VARCHAR(30)|0||0 2|NAMECN|VARCHAR(30)|0||0 3|DISTRICTEN|VARCHAR(20)|0||0 4|DISTRICTCN|VARCHAR(20)|0||0 5|PROVEN|VARCHAR(20)|0||0 6|PROVCN|VARCHAR(20)|0||0 7|NATIONEN|VARCHAR(20)|0||0 8|NATIONCN|VARCHAR(20)|0||0
获取数据库
SQLiteDatabase mDb = openOrCreateDatabase("cityname.db", SQLiteDatabase.CREATE_IF_NECESSARY, null); Cursor mCursor = mDb.rawQuery("select * from " + "t_city", null);
遍历数据库,绑定
while (mCursor.moveToNext(){...} adapter = new SimpleAdapter(this,mData,R.layout.item, new String[]{"name_sheng", "name_shi", "name_qu"}, new int[]{R.id.name_sheng, R.id.name_shi, R.id.name_qu}); mListView.setAdapter(adapter);
handler对象post的runnable
清空mData,判断QuName等三个List是否包含EditText的内容data
若EditText没有内容 则if语句一只成立 又重新的把全部省市区添加到mData中
Runnable editChanged = new Runnable() { @Override public void run() { mData.clear(); String data = mEditText.getText().toString(); int length = QuName.size(); for(int i = 0; i < length; i++){ HashMap<String,Object> item = new HashMap<String,Object>(); if(QuName.get(i).contains(data) || ShiName.get(i).contains(data) || ShengName.get(i).contains(data)){ item.put("name_qu",QuName.get(i)); item.put("name_shi",ShiName.get(i)); item.put("name_sheng", ShengName.get(i)); mData.add(item); } } adapter.notifyDataSetChanged(); } };
相关文章推荐
- 数据库记录被锁住的处理方法
- 单机环境下java使用redis的简单代码
- Oracle、MySQL和SqlServe分页查询的语句区别
- Oracle、MySQL和SqlServe分页查询的语句区别
- Redis CrackIT入侵事件分析
- MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 的原因分解决办法
- C#对于字符串的处理类(剪裁、过滤危险字符、替换sql中有问题符号等)
- Memcache及telnent命令详解
- navicat重新系统丢失libmysql_e
- MySQL 与 Mongodb 常用命令对比
- 详解数据库三种删除方法: delete drop truncate
- 对SqliteDatabase.findEditTable的改进
- sql ltrim rtrim
- centos6.7 redis安装和phpredis扩展
- Oracle学习大全
- 详解数据库设计准则: 第一范式,第二范式,第三范式
- Setting Up MySQL Debugging Environment
- 8.2 使用 MySQL 数据库
- 20160510 GreenPlum4 SQL中求和相关语句的总结
- oracle存储过程、声明变量、for循环(转)