欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android编程实现动态更新ListView的方法

程序员文章站 2024-02-22 19:48:40
本文实例讲述了android编程实现动态更新listview的方法。分享给大家供大家参考,具体如下: 有时候我们需要修改已经生成的列表,添加或者修改数据,notifyda...

本文实例讲述了android编程实现动态更新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>

程序代码:

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;
publicclass main extends activity {
/** called when the activity is first created. */
   listview lv;
   arrayadapter<string> adapter;
   arraylist<string> arr=new arraylist<string>();
   @override
 publicvoid 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
 publicvoid 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线程调用
 returnnull;
     }
     @override
 protectedvoid onpostexecute(string result) {
 // todo auto-generated method stub
 super.onpostexecute(result);
       adapter.notifydatasetchanged();
 //执行完毕,更新ui
     }
   }
 private onitemclicklistener lvlis=new onitemclicklistener(){
     @override
 publicvoid onitemclick(adapterview<?> arg0, view arg1, int arg2,
 long arg3) {
 //点击条目时触发
 //arg2即为点中项的位置
       settitle(string.valueof(arr.get(arg2)));
     }
   };
}

更多关于android相关内容感兴趣的读者可查看本站专题:《android开发入门与进阶教程》、《android数据库操作技巧总结》及《android控件用法总结

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