有时候我们需要修改已经生成的列表,添加或者修改数据,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;
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)));
}
};
}
分享到:
相关推荐
Android中ListView用NotifyDataSetChanged实现添加数据时动态刷新
本文实例讲述了Android编程实现动态更新ListView的方法。分享给大家供大家参考,具体如下: 有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器绑定的数组后,不用重新...
Listview不用notifydatasetchanged更新数据的方法
本文实例讲述了Android通过Handler与AsyncTask两种方式动态更新ListView的方法。分享给大家供大家参考,具体如下: 有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器...
blog: http://blog.csdn.net/u013293125/article/details/52858396 http://www.cnblogs.com/ityizhainan/p/5976845.html
ListView列表数据更新,notifyDataSetChanged()方法 实现代码,简单易懂。是新手学习的好demo
根据EditText搜索框ListView动态显示数据是根据需求来的...4、利用notifyDataSetChanged()动态更新ListView 第一步:创建一个搜索框 这个还是比较容易的,这里我使用的是http://blog.csdn.net/walker02/article/detail
Android 调用notifyDataSetChanged方法失败解决办法 如果使用ListView、GridView等进行数据展示,当绑定的数据有了更新的时候,需要实时刷新...3、数据源更新了,但是adpter没有收到消息通知,无法动态更新列表。 一
关于ListView中adapter调用notifyDataSetChanged失效的原因总结 详细见博客: http://blog.csdn.net/whitley_gong/article/details/50562634
在RecyclerView出来之前,ListView如果要实现局部更新,首先要自定义一个ViewHolder,其次要自己写一个局部更新的函数。整体的流程算不上复杂,但是确实不是很方便,开发者们都会不由得想,为什么不直接官方就把这个...
不用adapter的notifyDataSetChanged()方式修改listview的item某个控件的设置,通过点击item中的textview使得该textview的值发生改变
对于android中的ListView刷新机制,大多数的程序员都是很熟悉的,修改或者添加adapter中的数据源之后,然后调用notifyDataSetChanged()刷新ListView。在这种模式下,我们会在getView中,根据不同的数据源,让控件...
demoAdapter.notifyDataSetChanged(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater()....
学过Android开发的人都知道,ListView控件在开发中经常遇到,并且ListView通常结合Adapter适配器来进行数据显示和数据更新操作。姑且假设数据存储在名为dataList的成员变量中。数据操作无非是增加数据、删除数据这两...
使用Loader+contentProvider删除修改ListView 并替换notifyDataSetChanged 刷新 该资源代码是网上别人的代码 做了些简单的修改 这是网上大牛写的 做了微改并上传以便未来使用
主要原理:是在主界面有两个空间,一个是EditText,一个是...也就是使适配器更新数据,这里还有用到一个pinyin4j-2.5.0.jar的架包,这个主要是汉字转拼 音的功能 MainActivity.Java public class MainActivity extends
adapter.notifyDataSetChanged(); listView.setSelection(0); titleText.setText("中国"); currentLevel = LEVEL_PROVINCE; } else { queryFromServer(null, "province"); } } /** * 查询...
简单实现android listviewx点赞动画效果,无需调用notifyDataSetChanged执行列表刷新
一个自定义Adapter,可以快速实现三个功能: (1)自动缓存处理 好吧,这个功能不是我实现的。我只是照搬鸿洋大大的,我会...只刷新指定item的某个子View,避免一直调用notifyDataSetChanged()造成不必要的整体刷新。