notifyDataSetChanged() 动态更新ListView 通过 Handler AsyncTask两种方式

有时候我们需要修改已经生成的列表,添加或者修改数据,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 >
复制代码

程序代码:

复制代码
  
  
1 import java.util.ArrayList; 2 3   import android.app.Activity; 4   import android.os.AsyncTask; 5   import android.os.Bundle; 6   import android.os.Handler; 7   import android.view.View; 8   import android.widget.AdapterView; 9 import android.widget.ArrayAdapter; 10 import android.widget.ListView; 11 import android.widget.AdapterView.OnItemClickListener; 12 13 public class main extends Activity { 14 /** Called when the activity is first created. */ 15 ListView lv; 16 ArrayAdapter < String > Adapter; 17 ArrayList < String > arr = new ArrayList < String > (); 18 @Override 19 public void onCreate(Bundle savedInstanceState) { 20 super .onCreate(savedInstanceState); 21 setContentView(R.layout.main); 22 lv = (ListView)findViewById(R.id.lv); 23 arr.add( " 123 " ); 24 arr.add( " 234 " ); 25 arr.add( " 345 " ); 26 Adapter = new ArrayAdapter < String > ( this ,R.layout.playlist, arr); 27 lv.setAdapter(Adapter); 28 lv.setOnItemClickListener(lvLis); 29 editItem edit = new editItem(); 30 edit.execute( " 0 " , " 第1项 " ); // 把第一项内容改为"第一项" 31 Handler handler = new Handler(); 32 handler.postDelayed(add, 3000 ); // 延迟3秒执行 33 } 34 Runnable add = new Runnable(){ 35 36 @Override 37 public void run() { 38 // TODO Auto-generated method stub 39 arr.add( " 增加一项 " ); // 增加一项 40 Adapter.notifyDataSetChanged(); 41 } 42 }; 43 class editItem extends AsyncTask < String,Integer,String > { 44 @Override 45 protected String doInBackground(String... params) { 46 arr.set(Integer.parseInt(params[ 0 ]),params[ 1 ]); 47 // params得到的是一个数组,params[0]在这里是"0",params[1]是"第1项" 48 // Adapter.notifyDataSetChanged(); 49 // 执行添加后不能调用 Adapter.notifyDataSetChanged()更新UI,因为与UI不是同线程 50 // 下面的onPostExecute方法会在doBackground执行后由UI线程调用 51 return null ; 52 } 53 54 @Override 55 protected void onPostExecute(String result) { 56 // TODO Auto-generated method stub 57 super .onPostExecute(result); 58 Adapter.notifyDataSetChanged(); 59 // 执行完毕,更新UI 60 } 61 62 } 63 private OnItemClickListener lvLis = new OnItemClickListener(){ 64 @Override 65 public void onItemClick(AdapterView <?> arg0, View arg1, int arg2, 66 long arg3) { 67 // 点击条目时触发 68 // arg2即为点中项的位置 69 setTitle(String.valueOf(arr.get(arg2))); 70 71 } 72 73 }; 74 75 }  
复制代码


本实例代码下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值