adapter 学习

来源:互联网 发布:网络聊天的利与弊 编辑:程序博客网 时间:2024/06/11 18:30
      在Android应用开发过程中,适配器(Adapter)可是大有可为,尤其是在显示数据、读取数据库用列表显示更是使用频繁。但是今天我们要说的不是读取数据库中的信息,而是自己来添加一行数据让它显示在列表顶层。实现的功能有添加数据和删除数据两项。废话不多说,代码赶紧的!

首先先看下运行效果如下所示:

     

                                 图一                                                                                 图二

   

                                  图三                                                                                   图四

 

以上四张图演示了添加一行数据到列表中的功能,至于删除数据在这里就不演示了,留给童靴们去做。

开始介绍工程项目了,步骤如下:

1、新建项目命名为List

2、编写一个Bean封装其属性,命名为Item.java,代码如下:

view plainprint?
  1. package com.wyf.wpf;  
  2.   
  3. import java.text.SimpleDateFormat;  
  4. import java.util.Date;  
  5.   
  6. public class Item {  
  7.       
  8.     String task;  
  9.     Date created;  
  10.   
  11.     public String getTask() {  
  12.     return task;  
  13.     }  
  14.   
  15.     public Date getCreated() {  
  16.     return created;  
  17.     }  
  18.   
  19.     public Item(String _task) {  
  20.     this(_task, new Date(java.lang.System.currentTimeMillis()));  
  21.     }  
  22.   
  23.     public Item(String _task, Date _created) {  
  24.     task = _task;  
  25.     created = _created;  
  26.     }  
  27.       
  28.     @Override  
  29.     public String toString() {  
  30.     SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");  
  31.     String dateString = sdf.format(created);  
  32.     return "(" + dateString + ")" + task;  
  33.     }  
  34. }  


3、编写三个布局

(1)、main.xml:用于主布局

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

 

(2)、item.xml:用于显示列表中的每列数据

view plainprint?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="horizontal">  
  6.     <TextView  
  7.         android:id="@+id/row"  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:layout_weight="1"  
  11.         android:padding="5px"  
  12.         android:gravity="center"  
  13.         />  
  14.     <TextView  
  15.         android:id="@+id/rowDate"  
  16.         android:layout_width="wrap_content"  
  17.         android:layout_height="wrap_content"  
  18.         android:layout_weight="1"  
  19.         android:gravity="center"  
  20.         android:padding="5px"  
  21.         />  
  22. </LinearLayout>  

(3)、add.xml:用于弹出对话框提示添加数据的布局

view plainprint?
  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.     <EditText   
  7.         android:id="@+id/add"  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="wrap_content"  
  10.         />  
  11.   
  12. </LinearLayout>  

4、自定义自己的Adapter,命名为MyAdapter.java,代码如下:

view plainprint?
  1. package com.wyf.wpf;  
  2.   
  3. import java.text.SimpleDateFormat;  
  4. import java.util.Date;  
  5. import java.util.List;  
  6.   
  7.   
  8. import android.content.Context;  
  9. import android.util.Log;  
  10. import android.view.LayoutInflater;  
  11. import android.view.View;  
  12. import android.view.ViewGroup;  
  13. import android.widget.BaseAdapter;  
  14. import android.widget.TextView;  
  15.   
  16. public class MyAdapter extends BaseAdapter{  
  17.       
  18.     private LayoutInflater mInflater;  
  19.     private List<Item> items;  
  20.       
  21.     public MyAdapter(Context context,List<Item> items){  
  22.         this.items=items;  
  23.         mInflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  24.     }  
  25.   
  26.     @Override  
  27.     public int getCount() {  
  28.         // TODO Auto-generated method stub  
  29.         return items.size();  
  30.     }  
  31.   
  32.     @Override  
  33.     public Object getItem(int position) {  
  34.         // TODO Auto-generated method stub  
  35.         if(items==null)  
  36.         {  
  37.             return null;  
  38.         }  
  39.         else  
  40.         {  
  41.             return items.get(position);  
  42.         }  
  43.     }  
  44.   
  45.     @Override  
  46.     public long getItemId(int position) {  
  47.         // TODO Auto-generated method stub  
  48.         return position;  
  49.     }  
  50.   
  51.     @Override  
  52.     public View getView(int position, View convertView, ViewGroup parent) {  
  53.         // TODO Auto-generated method stub  
  54.         Item item=(Item) getItem(position);  
  55.         String nameString=item.getTask().toString();  
  56.         Date date=item.getCreated();  
  57.         SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");  
  58.         String dateString = sdf.format(date);  
  59.         ViewHolder holder;  
  60.         if(convertView==null){  
  61.             holder=new ViewHolder();  
  62.             convertView=mInflater.inflate(R.layout.item,null);  
  63.             holder.nameText=(TextView)convertView.findViewById(R.id.row);  
  64.             holder.dateText=(TextView)convertView.findViewById(R.id.rowDate);  
  65.             convertView.setTag(holder);  
  66.         }  
  67.         else{  
  68.             holder = (ViewHolder) convertView.getTag();  
  69.         }  
  70.         holder.nameText.setText(nameString);  
  71.         Log.i("TAG","nameString---->"+nameString);  
  72.         Log.i("TAG","holder.name---->"+holder.nameText);  
  73.         holder.dateText.setText(dateString);  
  74.         return convertView;  
  75.     }  
  76.       
  77.     class ViewHolder{  
  78.         TextView nameText;  
  79.         TextView dateText;  
  80.     }  
  81.   
  82. }  

5、编写Activity,这里就不解释了,直接上代码:

view plainprint?
  1. package com.wyf.wpf;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import android.app.Activity;  
  6. import android.app.AlertDialog;  
  7. import android.content.Context;  
  8. import android.content.DialogInterface;  
  9. import android.content.DialogInterface.OnClickListener;  
  10. import android.os.Bundle;  
  11. import android.view.KeyEvent;  
  12. import android.view.LayoutInflater;  
  13. import android.view.View;  
  14. import android.widget.AdapterView;  
  15. import android.widget.AdapterView.OnItemClickListener;  
  16. import android.widget.EditText;  
  17. import android.widget.ListView;  
  18.   
  19. public class ListActivity extends Activity{  
  20.     private ArrayList<Item> Items;  
  21.     private ListView myListView;  
  22.     private MyAdapter adapter;  
  23.     private String[] str={"添加组","删除组"};  
  24.   
  25.     /** Called when the activity is first created. */  
  26.     @Override  
  27.     public void onCreate(Bundle savedInstanceState) {  
  28.         super.onCreate(savedInstanceState);  
  29.         setContentView(R.layout.main);  
  30.         myListView = (ListView)findViewById(R.id.myListView);  
  31.         Items = new ArrayList<Item>();  
  32.         for(int i=0;i<10;i++){  
  33.             Item item=new Item("我是"+i);  
  34.             Items.add(item);  
  35.         }  
  36.         adapter=new MyAdapter(this,Items);  
  37.         myListView.setAdapter(adapter);  
  38.         myListView.setOnItemClickListener(new OnItemClickListener() {  
  39.   
  40.             @Override  
  41.             public void onItemClick(AdapterView<?> arg0, View arg1, final int position,  
  42.                     long arg3) {  
  43.                 // TODO Auto-generated method stub  
  44.                 new AlertDialog.Builder(ListActivity.this)  
  45.                 .setItems(str, new DialogInterface.OnClickListener() {  
  46.                       
  47.                     @Override  
  48.                     public void onClick(DialogInterface dialog, int which) {  
  49.                         // TODO Auto-generated method stub  
  50.                         switch(which){  
  51.                         case 0:  
  52.                             LayoutInflater mInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  53.                             final View view=mInflater.inflate(R.layout.add,null);  
  54.                             new AlertDialog.Builder(ListActivity.this)  
  55.                             .setView(view)  
  56.                             .setTitle("添加")  
  57.                             .setPositiveButton("添加",new OnClickListener() {  
  58.                                   
  59.                                 @Override  
  60.                                 public void onClick(DialogInterface dialog, int which) {  
  61.                                     // TODO Auto-generated method stub  
  62.                                     EditText add=(EditText)view.findViewById(R.id.add);  
  63.                                     String str=add.getText().toString();  
  64.                                     updateAdapter(str);  
  65.                                     dialog.dismiss();  
  66.                                 }  
  67.                             })  
  68.                             .setNegativeButton("取消",new OnClickListener() {  
  69.                                   
  70.                                 @Override  
  71.                                 public void onClick(DialogInterface dialog, int which) {  
  72.                                     // TODO Auto-generated method stub  
  73.                                     dialog.dismiss();  
  74.                                 }  
  75.                             }).show();  
  76.                             break;  
  77.                         case 1:  
  78.                             Items.remove(position);  
  79.                             adapter.notifyDataSetChanged();  
  80.                             dialog.dismiss();  
  81.                             break;  
  82.                         }  
  83.                     }  
  84.                 }).show();  
  85.             }  
  86.         });  
  87.    }  
  88.     //更新adapter函数  
  89.     public void updateAdapter(String str){  
  90.         Item newItem;  
  91.         newnewItem = new Item(str);  
  92.         Items.add(0, newItem);  
  93.         adapter.notifyDataSetChanged();  
  94.     }  
  95. }  

上面的代码一般都不难,在这里就没必要详解了,只是需要注意一点,我没要刷新列表数据,就的使用adapter.notifyDataSetChanged();来更新。


原创粉丝点击