动态更新listview adapter

来源:互联网 发布:怎么样购买域名 编辑:程序博客网 时间:2024/04/29 03:25

    比如listview有三个项,那我有没有机会,能动态改变的成4项呢? 我说,有机会。 


那我们需要简单理解list adapter的关系,adapter是MVC中的M,用来管理数据,那应该我们有机会来添加 删除 插入等操作。 
Java代码  收藏代码
  1. package com.qisda;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import android.app.Activity;  
  7. import android.app.Application;  
  8. import android.content.ComponentName;  
  9. import android.database.DataSetObserver;  
  10. import android.os.Bundle;  
  11. import android.util.Log;  
  12. import android.view.View;  
  13. import android.view.ViewGroup;  
  14. import android.widget.AdapterView;  
  15. import android.widget.ArrayAdapter;  
  16. import android.widget.Button;  
  17. import android.widget.ListAdapter;  
  18. import android.widget.ListView;  
  19. import com.qisda.R;  
  20.   
  21. public class Main extends Activity {  
  22.     public static final int ZERO=0;  
  23.     ComponentName name=this.getComponentName();  
  24.     public static final int WC=ViewGroup.LayoutParams.WRAP_CONTENT;  
  25.     ArrayAdapter<String> adapter=null;  
  26.     /** Called when the activity is first created. */  
  27.     @Override  
  28.     public void onCreate(Bundle savedInstanceState) {  
  29.         super.onCreate(savedInstanceState);  
  30.         setContentView(R.layout.main);  
  31.           
  32.         Button btn=(Button)this.findViewById(R.id.btn);  
  33.         btn.setOnClickListener(btnlistener);  
  34.    /** 
  35.     * list content initialize      
  36.     */  
  37.         List<String> arrayList=new ArrayList<String>();  
  38.         arrayList.add("first");  
  39.         arrayList.add("second");  
  40.         arrayList.add("third");  
  41.         adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arrayList);  
  42.     /** 
  43.      * display the list View and register the listener 
  44.      */  
  45.         ListView listview=(ListView)findViewById(R.id.listview);  
  46.         listview.setAdapter(adapter);  
  47.         listview.setOnItemClickListener(itemlistener);  
  48.     }  
  49.     AdapterView.OnItemClickListener itemlistener=new AdapterView.OnItemClickListener() {  
  50.         public void onItemClick(AdapterView<?> parent, View view, int position, long id){  
  51.             debug(position);  
  52.         }  
  53.     };  
  54.     View.OnClickListener btnlistener=new View.OnClickListener(){  
  55.         public void onClick(View view){  
  56.             if(view.getId()==R.id.btn)  
  57.             {  
  58.                 adapter.insert("tmp",1);  
  59.             }  
  60.         }  
  61.     };  
  62.     public void debug(int position){  
  63.         Log.d("DEBUG","user click the item :"+position);  
  64.     }  
  65.     public void debug(Object obj){  
  66.         if(obj==null){  
  67.             debug(10);  
  68.         }  
  69.         Log.d("DEBUG","the obj name is :"+obj.toString());  
  70.     }  
  71. }  

从这个例子看出,我们可以直接对adapter操作。具体里面是如何作的,大家可以看看android代码,里面说的很清楚,也比较简单。 

这里可能大家有几个问题,一个 listview如何知道adapter数据改变了,因为V只负责画, 
二,我们是否有机会获取当数据改变时候告诉我们呢。 

其实这两个问题,是一个问题。也就是 数据改变时候,如何发出通知。 

我们可以这样作。 
Java代码  收藏代码
  1. DataSetObserver observer=new DataSetObserver(){  
  2.         public void onChanged() {  
  3.             debug("list adapter value changed !");  
  4.         }  
  5.     };  
  6. adapter.registerDataSetObserver(observer);  


当数据改变时候,会调用这个抽象类方法onChange() ,这样我们就有机会知道了。 

listview 也是在里面注册了这么个东西,实现画面更新的。 
原创粉丝点击