Android通过Handler与AsyncTask两种方式动态更新ListView(附源码)

作者:admin 时间:2022-04-14 03:32:22 

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

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

布局main.xml:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView android:id="@+id/lv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>

ListView列表布局playlist.xml:


<?xml version="1.0" encoding="utf-8"?>
<TextView
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"
></TextView>

程序代码:


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<String> Adapter;
 ArrayList<String> arr=new ArrayList<String>();
@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<String>(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<String,Integer,String>{
   @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,Handler,AsyncTask,ListView
0
投稿

猜你喜欢

  • hibernate 命名查询如何实现

    2023-11-04 02:35:41
  • C#端口转发用法详解

    2022-09-05 08:47:08
  • 使用 BenchmarkDotNet 对 C# 代码进行基准测试

    2023-06-25 00:38:49
  • Java线程池大小的设置方法实例

    2022-10-04 04:20:19
  • flutter实现底部导航栏

    2023-08-23 01:06:13
  • C#操作CSV文件类实例

    2023-04-29 13:49:44
  • 详解springboot和vue前后端分离开发跨域登陆问题

    2023-08-07 00:48:38
  • Android studio so库找不到问题解决办法

    2023-10-28 02:20:49
  • Java数组扩容实现方法解析

    2021-08-25 13:08:26
  • maven无法依赖spring-cloud-stater-zipkin的解决方案

    2023-09-12 01:54:51
  • Android开发实现跟随手指的小球效果示例

    2022-05-31 08:58:10
  • Android 自定义ProgressDialog进度条对话框用法详解

    2022-02-14 19:31:04
  • Android实现在xml文件中引用自定义View的方法分析

    2021-05-28 01:43:57
  • Android UI设计与开发之仿人人网V5.9.2最新版引导界面

    2022-10-10 17:34:16
  • OpenGL绘制Bezier曲线的方法

    2023-11-01 03:59:30
  • Android Studio三方引用报错但是项目可以运行的解决方案

    2022-06-05 19:28:56
  • Java数组与堆栈相关知识总结

    2023-11-12 06:12:18
  • VS2010中lib与dll文件的生成与使用方法

    2023-01-23 11:32:50
  • SpringBoot整合Activiti工作流框架的使用

    2022-03-02 12:32:44
  • Java如何构造DSL方法重构

    2021-10-10 02:04:09
  • asp之家 软件编程 m.aspxhome.com