[转]notifyDataSetChanged() 动态更新ListView

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

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="fill_parent"
 5     android:layout_height="fill_parent"
 6     >
 7 <ListView  android:id="@+id/lv"
 8     android:layout_width="fill_parent"
 9     android:layout_height="wrap_content"
10     android:text="@string/hello"
11     />
12 </LinearLayout>

ListView列表布局playlist.xml:

1 <?xml version="1.0" encoding="utf-8"?>
2 <TextView
3   android:id="@+id/text1"
4   xmlns:android="http://schemas.android.com/apk/res/android"
5   android:layout_width="fill_parent"
6   android:layout_height="30px"
7   android:textSize="18sp"
8 ></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 }

时间: 2024-11-04 12:54:01

[转]notifyDataSetChanged() 动态更新ListView的相关文章

notifyDataSetChanged() 动态更新ListView

有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器绑定的数组后,不用重新刷新Activity,通知Activity更新ListView.今天的例子就是通过Handler AsyncTask两种方式来动态更新ListView.从今天起,每次学习的源代码都会打包上传,方便各位同学学习,注册帐号即可下载.布局main.xml: <?xml version="1.0" encoding="utf-8"?&g

Android ListView动态更新数据

ListView就是可以显示一行行Item的控件,有时候数据非常多,通常需要分页显示,但为了减少用户的输入,我们可以动态更新ListView,把下一页要显示的数据的添加到当前ListView中. 先看看效果: 需要注意的是在什么时候去更新数据 ,listVIew的setOnScrollListener监听是否滚到了最后一条记录, 取到的数据加到list中,最后记得调用adapter的notifyDataSetChanged,通知listview改变. 不废话,上代码. 主文件: mport ja

Android零基础入门第44节:ListView数据动态更新

经过前面几期的学习,关于ListView的一些基本用法大概学的差不多了,但是你可能发现了,所有ListView里面要填充的数据都是静态的,但在实际开发中,这些数据往往都是动态变化的,比如数据内容发生改变.增加几行.或者删除几行,这就涉及到ListView数据的更新问题. 接下来通过一个简单的示例程序来学习ListView的数据更新. 继续使用WidgetSample工程,在app/main/res/layout/目录下创建updatedata_layout.xml文件,在其中填充如下代码片段:

文件重命名之动态修改ListView里指定Item中的组件属性

在Android实际开发过程中经常会遇到,修改ListView中某一项的值.如何达到这一目的呢? 方法主要有两种: 第一种方式:当ListView中某一项的值发生变化之后,重新加载数据已达到更新ListView的目的. 虽然第一种方式能够解决问题,但不值得推荐.因为这样会带来不必要的资源消耗.在移动终端这种硬件资源和计算能力都有限的情况下,显然有点得不偿失了,况且用户的体验也不好. 第二种方式:第二种方式可以说是第一种方式的改进.ListView中某一项的值发生改变,实际上是ListView的数

Android 进价5_自定义广播 通过广播更新ListView的适配器 下载管理

1.在处理下载管理时,服务在后台运行,下载完成后要更新listview列表的按钮,将“下载”改成“打开”这样一个功能. 在Activity里面写一个静态内部类,继承广播.其中属性text_button的值就是按钮显示的文字.通过mAdapter.notifyDataSetChanged()更新列表数据显示. public static class DownloadFinishReceiver extends BroadcastReceiver{ public static final Strin

Android:仿手机QQ好友动态的ListView

1.介绍: 本博客使用XListView模仿Android版QQ好友动态的ListView效果.效果截图例如以下: 效果图1 效果图2 这里面主要涉及的是ListView的布局问题,让我们看一下Item的布局文件吧. <?xml version="1.0" encoding="utf-8"? > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&

Service 动态更新 UI

http://blog.csdn.net/u013724061/article/details/38642049 最终效果: 动态显示当前时间和电量 思路: 首先在Activity里用内部类定义两种广播,一种是系统广播(电池),另一种是自定义广播. private class SimpleBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent int

定时动态更新图表

在进行实现动态更新图表时主要使用AJAX技术,主要分两种实现方法,一种是通过ASP.NET特有的AJAX控件,UpdatePanel.Timer控件+ASP.NET自带的Chart控件实现:另一种为使用第三方的图表库+JQUERY\AJAX实现. ASP.NET控件实现 实现: 前台将要定时刷新的内容放到updatePanel中即可,前台代码如下: <form id="form1" runat="server"> <asp:ScriptManage

JSPatch – 动态更新iOS APP

博文转载至 http://blog.cnbang.net/works/2767/ JSPatch是最近业余做的项目,只需在项目中引入极小的引擎,就可以使用JavaScript调用任何Objective-C的原生接口,获得脚本语言的能力:动态更新APP,替换项目原生代码修复bug. 用途 是否有过这样的经历:新版本上线后发现有个严重的bug,可能会导致crash率激增,可能会使网络请求无法发出,这时能做的只是赶紧修复bug然后提交等待漫长的AppStore审核,再盼望用户快点升级,付出巨大的人力和