本文实例讲述了Android通过Handler与AsyncTask两种方式动态更新ListView的方法。分享给大家供大家参考,具体如下:

有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器绑定的数组后,不用重新刷新Activity,通知Activity更新ListView。今天的例子就是通过Handler AsyncTask两种方式来动态更新ListView.

布局main.xml:

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"

/>

ListView列表布局playlist.xml:

android:id="@+id/text1"

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="30px"

android:textSize="18sp"

>

程序代码:

package com.pocketdigi;

import java.util.ArrayList;

import android.app.Activity;

import android.os.AsyncTask;

import android.os.Bundle;

import android.os.Handler;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.widget.AdapterView.OnItemClickListener;

public class main extends Activity {

/** Called when the activity is first created. */

ListView lv;

ArrayAdapter Adapter;

ArrayList arr=new ArrayList();

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

lv=(ListView)findViewById(R.id.lv);

arr.add("123");

arr.add("234");

arr.add("345");

Adapter = new ArrayAdapter(this,R.layout.playlist, arr);

lv.setAdapter(Adapter);

lv.setOnItemClickListener(lvLis);

editItem edit= new editItem();

edit.execute("0","第1项");//把第一项内容改为"第一项"

Handler handler=new Handler();

handler.postDelayed(add,3000);//延迟3秒执行

}

Runnable add=new Runnable(){

@Override

public void run() {

// TODO Auto-generated method stub

arr.add("增加一项");//增加一项

Adapter.notifyDataSetChanged();

}

};

class editItem extends AsyncTask{

@Override

protected String doInBackground(String... params) {

arr.set(Integer.parseInt(params[0]),params[1]);

//params得到的是一个数组,params[0]在这里是"0",params[1]是"第1项"

//Adapter.notifyDataSetChanged();

//执行添加后不能调用 Adapter.notifyDataSetChanged()更新UI,因为与UI不是同线程

//下面的onPostExecute方法会在doBackground执行后由UI线程调用

return null;

}

@Override

protected void onPostExecute(String result) {

// TODO Auto-generated method stub

super.onPostExecute(result);

Adapter.notifyDataSetChanged();

//执行完毕,更新UI

}

}

private OnItemClickListener lvLis=new OnItemClickListener(){

@Override

public void onItemClick(AdapterView> arg0, View arg1, int arg2,

long arg3) {

//点击条目时触发

//arg2即为点中项的位置

setTitle(String.valueOf(arr.get(arg2)));

}

};

}

打包的源代码中有错误,Adapter.notifyDataSetChanged();在doInBackground中,请作相应修改,感谢同学提醒。

完整实例代码代码点击此处本站下载。

希望本文所述对大家Android程序设计有所帮助。

android asynctask源码分析,Android通过Handler与AsyncTask两种方式动态更新ListView(附源码)...相关推荐

  1. Spark资源调度机制源码分析--基于spreadOutApps及非spreadOutApps两种资源调度算法

    Spark资源调度机制源码分析--基于spreadOutApps及非spreadOutApps两种资源调度算法 1.spreadOutApp尽量平均分配到每个executor上: 2.非spreadO ...

  2. Android 7.1 增加屏幕边缘滑动事件(手势滑动)两种方式(Back,Home,Menu功能键) 免开启无障碍功能

    目前公司在做新项目开发,项目目前是不让有Back,Home,Menu实体按键,这就导致了一个问题,点开其它应用无法返回到桌面, 当然些问题对于做开发的我们肯定是难不到的,如果我们开发碰到这问题肯定是a ...

  3. java开启一个线程_【jdk源码分析】java多线程开启的三种方式

    1.继承Thread类,新建一个当前类对象,并且运行其start()方法 1 packagecom.xiaostudy.thread;2 3 /** 4 * @desc 第一种开启线程的方式5 *@a ...

  4. android app内部打开word pdf .doc类型文件的两种方式

    1.是集成了x5内核的webview使用的是腾讯的tbs 这种的直接上github找一个demo集成一下就可以了 2.直接接入第三方 sdk进行开发 https://github.com/Office ...

  5. linux耳机插拔检测,Android应用开发之耳机插拔处理两种方式

    本文将带你了解Android应用开发[RK3288][Android6.0] 耳机插拔处理两种方式,希望本文对大家学Android有所帮助. [RK3288][Android6.0]   耳机插拔处理 ...

  6. android的消息处理机制(图+源码分析)——Looper,Handler,Message

    android源码中包含了大量的设计模式,除此以外,android sdk还精心为我们设计了各种helper类,对于和我一样渴望水平得到进阶的人来说,都太值得一读了.这不,前几天为了了解android ...

  7. 【转】android的消息处理机制(图+源码分析)——Looper,Handler,Message

    原文地址:http://www.cnblogs.com/codingmyworld/archive/2011/09/12/2174255.html#!comments 作为一个大三的预备程序员,我学习 ...

  8. 源码分析Android Handler是如何实现线程间通信的

    源码分析Android Handler是如何实现线程间通信的 Handler作为Android消息通信的基础,它的使用是每一个开发者都必须掌握的.开发者从一开始就被告知必须在主线程中进行UI操作.但H ...

  9. (连载)Android系统源码分析--Android系统启动流程之Linux内核

    > **这是一个连载的博文系列,我将持续为大家提供尽可能透彻的Android源码分析 [github连载地址](https://github.com/foxleezh/AOSP/issues/3 ...

最新文章

  1. 小程序云开发常用语句宝库
  2. ffmpeg视频学习网站
  3. DL之CNN:自定义SimpleConvNet【3层,im2col优化】利用mnist数据集实现手写数字识别多分类训练来评估模型
  4. IOS 应用官方接口地址
  5. meta http-equiv属性兼容浏览器_定时刷新
  6. hapi 获取 请求地址 url
  7. python的print函数输出带颜色字体
  8. [Vue warn]: Unknown custom element: <Top> - did you register the component correctly?
  9. 排序二叉树的插入、删除操作(递归方式)。
  10. 企业员工管理系统封面html,单页面模板
  11. 使用C语言--判断素数的两种方法
  12. AirServer 7win/mac手机投屏到电脑工具
  13. NOIP2018 复赛提高组一等奖获奖名单
  14. office2019安装教程
  15. 过滤树形结构数组的方法
  16. ATLAS/ICESAT-2 NASA 数据产品详细介绍及相关说明文档
  17. 3G无线上网卡种类介绍
  18. UE4虚幻引擎关于小地图制作教程
  19. eclipse安装TestNG后无法使用TestNG的解决方法
  20. Python闭包Closure

热门文章

  1. Spatial As Deep: Spatial CNN for Traffic Scene Understanding论文翻译
  2. onethink php7.1,海豚PHP开发框架下载
  3. ubunntu安装php7.0_在 Ubuntu/Debian 下安装 PHP7.3 教程
  4. AR SDK引擎技术选型和使用实现方案
  5. 【技巧】实现饿了么Element UI的table单击(点击)编辑单元格内容
  6. UE4创建第一人称射击游戏学习教程 Unreal Engine 4: Create Your Own First-Person Shooter
  7. C语言的单链表逆序和指定范围逆序
  8. centos6.5原生系统修改ceph-mon 的ELF来让其加载低版本glibc库函数
  9. LabelButtonScale
  10. 如何养出一个三十几亿身家的儿子