博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]notifyDataSetChanged() 动态更新ListView
阅读量:6084 次
发布时间:2019-06-20

本文共 2919 字,大约阅读时间需要 9 分钟。

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

布局main.xml:

 

1 
2
7
12
View Code

ListView列表布局playlist.xml:

 

1 
2
View Code

程序代码:

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
Adapter;17 ArrayList
arr=new ArrayList
();18 @Override19 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
(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 @Override37 public void run() {38 // TODO Auto-generated method stub39 arr.add("增加一项");//增加一项40 Adapter.notifyDataSetChanged(); 41 } 42 };43 class editItem extends AsyncTask
{44 @Override45 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 @Override55 protected void onPostExecute(String result) {56 // TODO Auto-generated method stub57 super.onPostExecute(result);58 Adapter.notifyDataSetChanged();59 //执行完毕,更新UI60 }61 62 }63 private OnItemClickListener lvLis=new OnItemClickListener(){64 @Override65 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 }
View Code

 

转载地址:http://uezwa.baihongyu.com/

你可能感兴趣的文章
标准io和管道
查看>>
微会动平台免费开放多种活动场景现场抽奖功能产品助力企业市场活动
查看>>
Project:如何分析项目中的资源分配情况
查看>>
IT男的悲惨命运(自己写的连载中)2
查看>>
SQL server网络数据库的简单应用
查看>>
OpenBSD忘记root密码恢复
查看>>
jdbc报java.lang.ClassNotFoundException: com.mysql.jdbc.Drive
查看>>
从地址栏输入url到页面显示的步骤
查看>>
iOS快速集成支付宝
查看>>
深入理解编译注解(五)RetentionPolicy.SOURCE 和 RetentionPolicy.CLASS区别讨论
查看>>
nosql数据库:mongodb,redis,memcached,其优缺点和使用应用场景
查看>>
移动端 输入框 如果类型是number,用户也可以输入汉字和字母
查看>>
Security
查看>>
【排序算法】基于交换的排序算法(冒泡排序和快速排序)
查看>>
iOS 地图定位 定位
查看>>
Matplotlib 画廊
查看>>
Node.js 服务器
查看>>
Redis 高级主题之HyperLogLog
查看>>
openstack从入门到放弃
查看>>
HDU 4803 Poor Warehouse Keeper (贪心+避开精度)
查看>>