zoukankan      html  css  js  c++  java
  • [转]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>
    View Code

    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>
    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<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 }
    View Code
  • 相关阅读:
    【PAT甲级】1043 Is It a Binary Search Tree (25 分)(判断是否为BST的先序遍历并输出后序遍历)
    Educational Codeforces Round 73 (Rated for Div. 2)F(线段树,扫描线)
    【PAT甲级】1042 Shuffling Machine (20 分)
    【PAT甲级】1041 Be Unique (20 分)(多重集)
    【PAT甲级】1040 Longest Symmetric String (25 分)(cin.getline(s,1007))
    【PAT甲级】1039 Course List for Student (25 分)(vector嵌套于map,段错误原因未知)
    Codeforces Round #588 (Div. 2)E(DFS,思维,__gcd,树)
    2017-3-9 SQL server 数据库
    2017-3-8 学生信息展示习题
    2017-3-5 C#基础 函数--递归
  • 原文地址:https://www.cnblogs.com/UniqueColor/p/4731622.html
Copyright © 2011-2022 走看看