谁说咱们攻城狮不能写出既幽默又能懂的博客呢,本人想推出一系列博文,可以给刚接触Android开发的做一个参考,也可以与接触Android已久的各路大神比较一下,本人喜欢交流,如果有写得不好的地方,欢迎大家指出.如果有更好的效果或者功能,希望大家多多指点,互相学习可以共同进步.
说了这么多,现在进入今天的猪蹄,推出,有网购经验的同学应该对这个很熟悉,在淘宝的Android客户端里面,有一个功能是设置收货地址,不清楚的同学可以自己下载个淘宝客户端,自己添加一下看看.
本人一向喜欢贴图,这样有图有真相,才能说服每个人,废话不多说先上自己程序启动画面,然后运行界面,最后一张是淘宝客户端对照图.
图片震楼
启动界面
运行界面
淘宝界面
淘宝客户端无法录屏所以这里只能上静态的,大家可以自己打开淘宝客户端看看.
下面进行详细的代码讲解:
(一)本人在程序启动的时候开了一条后台服务landDivideServeice,目的是为了将全国的省市县总共4,189条数据插入到手机数据库里面去,原本的数据是保存在7个txt里面的,由于放在txt里面,读取操作很不方便,所以我把它放到数据库,在后面的地区筛选很快就出来,这个比淘宝还快哦,不信你们可以试一下.
这里要注意的一点是landDivideServeice是继承IntentService的,不是直接继承Service的.
IntentService是继承于Service并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService的方式和启动传统Service一样,同时,当任务执行完后,IntentService会自动停止,而不需要我们去手动控制。
简单的说IntentService类似于一条后台线程,但操作完成时,我们不用手动去关闭Serveice,他会自动关闭.MyIntentService继承IntentService,之后必须实现一个无参数的构造方法MyIntentService(),然后还要重写onHandleIntent(Intent intent);此后所有的后台操作即可在onHandleIntent(Intent intent)执行;
- public class MyIntentService extends IntentService {
- //必须实现的
- public MyIntentService() {
- super("MyIntentService");
- // TODO Auto-generated constructor stub
- }
- @Override
- protected void onHandleIntent(Intent arg0) {
- // TODO Auto-generated method stub
- //具体的操作
- }
- }
so ga...
IntentService详细解析:
http://blog.csdn.net/ryantang03/article/details/8146154
http://blog.csdn.net/flowingflying/article/details/7616333
(二)在程序启动的第一个activity里,我弄了一条倒计时线程,时间总共是20秒,目的是想为数据写入数据库争取多一些时间,如果你进入地址筛选界面,看到数据不全或者报错,是因为数据还没有写完.
实现倒计时功能主要是继承CountDownTimer类,重写onTick和onFinsh这两个方法,onFinish()中的代码是计时器结束的时候要做的事情;onTick(Long m)中的代码是你倒计时开始时要做的事情,构造方法TimeCount()中的两个参数中,前者是倒计的时间数,后者是倒计每秒中间 的间隔时间,都是以毫秒为单位.例如要倒计时30秒,每秒中间间隔时间是1秒,两个参数可以这样写TimeCount(20000,1000).
- TimeCount time = new TimeCount(20000, 1000);
- time.start();
- /* 定义一个倒计时的内部类 */
- class TimeCount extends CountDownTimer {
- public TimeCount(long millisInFuture, long countDownInterval) {
- super(millisInFuture, countDownInterval);
- }
- @Override
- public void onFinish() { //倒计时执行结束时操作
- next = 0;
- }
- @Override
- public void onTick(long millisUntilFinished) { //倒计执行时操作
- }
- }
(三)剩下的主要是一些界面的切换跟数据的读取,只要思路正确是不会被搞混的.
- landDivideDB = LandDivideDB.getInstance(getBaseContext());
- List landDivide = landDivideDB.queryAddress("superior=?", new String[]{"1"});
- Iterator iterator = null;
- if(landDivide!=null){
- iterator = landDivide.iterator();
- while(iterator.hasNext()){
- LandDivide l = iterator.next();
- sheng.add(l.getName());
- }
- }else{
- return;
- }
- mListView1.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView arg0, View arg1, int position,
- long arg3) {
- // TODO Auto-generated method stub
- mLinearLayout1.setVisibility(View.GONE);
- mLinearLayout2.setVisibility(View.VISIBLE);
- mLinearLayout3.setVisibility(View.GONE);
- shi.clear();
- String name = sheng.get(position);
- String code = null;
- shengStr = name;
- shengTxt2.setText(name);
- List landDivide = landDivideDB.queryAddress("name=?", new String[]{name});
- Iterator iterator= landDivide.iterator();
- while(iterator.hasNext()){
- LandDivide l = iterator.next();
- code = l.getCode();
- break;
- }
- List landDivide_2 = landDivideDB.queryAddress("superior=?", new String[]{code});
- Iterator iterator_2= landDivide_2.iterator();
- while(iterator_2.hasNext()){
- LandDivide l = iterator_2.next();
- shi.add(l.getName());
- }
- shiAdapter.notifyDataSetChanged();
- quAdapter.clear();
- quAdapter.notifyDataSetChanged();
- }
- });
- mListView2.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView arg0, View arg1, int position,
- long arg3) {
- // TODO Auto-generated method stub
- qu.clear();
- String name = shi.get(position);
- String code = null;
- shiStr = name;
- shengTxt3.setText(shengStr);
- shiTxt3.setText(name);
- List landDivide = landDivideDB.queryAddress("name=?", new String[]{name});
- Iterator iterator= landDivide.iterator();
- while(iterator.hasNext()){
- LandDivide l = iterator.next();
- code = l.getCode();
- break;
- }
- List landDivide_2 = landDivideDB.queryAddress("superior=?", new String[]{code});
- if(landDivide_2!=null){
- Iterator iterator_2= landDivide_2.iterator();
- while(iterator_2.hasNext()){
- LandDivide l = iterator_2.next();
- qu.add(l.getName());
- }
- }
- quAdapter.notifyDataSetChanged();
- if(qu.size()
关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?


微信扫码登录