listview 中有删除按钮,当点击时删除选中行

  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/listview3listview"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="fill_parent" >  
  11.     </ListView>  
  12.       
  13. </LinearLayout>  

listitem3.xml
[html]  view plain copy
  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.       
  7.     android:id="@+id/MyListItem3"     
  8.     android:paddingBottom="3dip"     
  9.     android:paddingLeft="10dip" >  
  10.      
  11.       
  12.     <ImageView   
  13.         android:id="@+id/listitem3imageview"  
  14.         android:layout_height="fill_parent"  
  15.         android:layout_width="wrap_content"  
  16.         />  
  17.     <LinearLayout  
  18.         android:layout_width="wrap_content"  
  19.         android:layout_height="fill_parent"  
  20.         android:orientation="vertical"  
  21.         >  
  22.         <TextView     
  23.             android:id="@+id/listitem3ItemTitle"  
  24.             android:layout_height="wrap_content"  
  25.             android:layout_width="fill_parent"   
  26.             android:textSize="30dip"  
  27.             />    
  28.         <TextView     
  29.             android:id="@+id/listitem3ItemText"  
  30.             android:layout_height="wrap_content"  
  31.             android:layout_width="fill_parent"  
  32.             />  
  33.     </LinearLayout>  
  34.     <Button   
  35.         android:id="@+id/listitem3button"  
  36.             android:layout_height="fill_parent"  
  37.             android:layout_width="wrap_content"   
  38.             android:text="delete"  
  39.         />  
  40. </LinearLayout>  

ListViewActivity3.java
[java]  view plain copy
  1. package my.android.activity;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. import android.app.AlertDialog;  
  9. import android.app.ListActivity;  
  10. import android.content.Context;  
  11. import android.content.DialogInterface;  
  12. import android.os.Bundle;  
  13. import android.util.Log;  
  14. import android.view.LayoutInflater;  
  15. import android.view.View;  
  16. import android.view.View.OnClickListener;  
  17. import android.view.ViewGroup;  
  18. import android.widget.BaseAdapter;  
  19. import android.widget.Button;  
  20. import android.widget.ImageView;  
  21. import android.widget.ListView;  
  22. import android.widget.TextView;  
  23.   
  24. public class ListViewActivity3 extends ListActivity {  
  25.   
  26.     private List<Map<String, Object>> mData;  
  27.     MyAdapter adapter = null;  
  28.   
  29.     @Override  
  30.     public void onCreate(Bundle savedInstanceState) {  
  31.         super.onCreate(savedInstanceState);  
  32.         mData = getData();  
  33.         adapter = new MyAdapter(this);  
  34.         setListAdapter(adapter);  
  35.     }  
  36.   
  37.     private List<Map<String, Object>> getData() {  
  38.         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();  
  39.   
  40.         Map<String, Object> map = new HashMap<String, Object>();  
  41.         map.put("title""G1");  
  42.         map.put("info""google 1");  
  43.         map.put("img", R.drawable.android1);  
  44.         list.add(map);  
  45.   
  46.         map = new HashMap<String, Object>();  
  47.         map.put("title""G2");  
  48.         map.put("info""google 2");  
  49.         map.put("img", R.drawable.android2);  
  50.         list.add(map);  
  51.   
  52.         map = new HashMap<String, Object>();  
  53.         map.put("title""G3");  
  54.         map.put("info""google 3");  
  55.         map.put("img", R.drawable.android3);  
  56.         list.add(map);  
  57.   
  58.         return list;  
  59.     }  
  60.   
  61.     // ListView 中某项被选中后的逻辑  
  62.     @Override  
  63.     protected void onListItemClick(ListView l, View v, int position, long id) {  
  64.         Log.v("MyListView4-click", (String) mData.get(position).get("title"));  
  65.     }  
  66.   
  67.     // listview中点击按键弹出对话框  
  68.     public void showInfo(final int position) {  
  69.         new AlertDialog.Builder(this).setTitle("我的提示").setMessage("确定要删除吗?")                  
  70.                 .setPositiveButton("确定"new DialogInterface.OnClickListener() {  
  71.                     @Override  
  72.                     public void onClick(DialogInterface dialog, int which) {  
  73.                         mData.remove(position);  
  74.                         // 通过程序我们知道删除了,但是怎么刷新ListView呢?  
  75.                         // 只需要重新设置一下adapter  
  76.                         setListAdapter(adapter);  
  77.                     }  
  78.                 }).show();  
  79.     }  
  80.   
  81.     public final class ViewHolder {  
  82.         public ImageView img;  
  83.         public TextView title;  
  84.         public TextView info;  
  85.         public Button viewBtn;  
  86.     }  
  87.   
  88.     public class MyAdapter extends BaseAdapter {  
  89.   
  90.         private LayoutInflater mInflater;  
  91.   
  92.         public MyAdapter(Context context) {  
  93.             this.mInflater = LayoutInflater.from(context);  
  94.         }  
  95.   
  96.         @Override  
  97.         public int getCount() {  
  98.             return mData.size();  
  99.         }  
  100.   
  101.         @Override  
  102.         public Object getItem(int arg0) {  
  103.             return null;  
  104.         }  
  105.   
  106.         @Override  
  107.         public long getItemId(int arg0) {  
  108.             return 0;  
  109.         }  
  110.   
  111.         /** 
  112.          * listView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到listView的长度 
  113.          * 然后根据这个长度,调用getView()逐一绘制每一行。 如果你的getCount()返回值是0的话,列表将不显示同样return 
  114.          * 1,就只显示一行。  系统显示列表时,首先实例化一个适配器。 
  115.          *  
  116.          * 当手动完成适配时,必须手动映射数据,这需要重写getView()方法。 系统在绘制列表的每一行的时候都将调用此方法,(可以设个变量试试) 
  117.          * getView()有三个参数 position表示将显示的是第几行 covertView是从布局文件中inflate来的布局 
  118.          * 我们用LayoutInflater的方法将定义好的vlist2.xml文件提取成View实例用来显示。 
  119.          * 然后将xml文件中的各个组件实例化(简单的findViewById()方法)。 这样便可以将数据对应到各个组件上了 
  120.          *  
  121.          * 但是按钮为了响应点击事件,需要为它添加点击监听器,这样就能捕获点击事件。 至此一个自定义的listView就完成了 
  122.          *  
  123.          * 现在让我们回过头从新审视这个过程 系统要绘制ListView了,他首先获得要绘制的这个列表的长度,然后开始绘制第一行,怎么绘制呢? 
  124.          * 调用getView()函数。在这个函数里面首先获得一个View(实际上是一个ViewGroup) 然后再实例并设置各个组件并显示。 
  125.          * 绘制完这一行了。再绘制下一行,直到绘完为止。 
  126.          */  
  127.         @Override  
  128.         public View getView(final int position, View convertView,  
  129.                 ViewGroup parent) {  
  130.   
  131.             // 通过Log.i()可以发现这个会多次调用,容易理解  
  132.   
  133.             ViewHolder holder = null;  
  134.             if (convertView == null) {  
  135.   
  136.                 holder = new ViewHolder();  
  137.   
  138.                 convertView = mInflater.inflate(R.layout.listitem3, null);  
  139.                 holder.img = (ImageView) convertView  
  140.                         .findViewById(R.id.listitem3imageview);  
  141.                 holder.title = (TextView) convertView  
  142.                         .findViewById(R.id.listitem3ItemTitle);  
  143.                 holder.info = (TextView) convertView  
  144.                         .findViewById(R.id.listitem3ItemText);  
  145.                 holder.viewBtn = (Button) convertView  
  146.                         .findViewById(R.id.listitem3button);  
  147.                 convertView.setTag(holder);  
  148.   
  149.             } else {  
  150.   
  151.                 holder = (ViewHolder) convertView.getTag();  
  152.             }  
  153.   
  154.             holder.img.setBackgroundResource((Integer) mData.get(position).get(  
  155.                     "img"));  
  156.             holder.title.setText((String) mData.get(position).get("title"));  
  157.             holder.info.setText((String) mData.get(position).get("info"));  
  158.             holder.viewBtn.setOnClickListener(new OnClickListener() {  
  159.                 @Override  
  160.                 public void onClick(View v) {  
  161.                     showInfo(position);  
  162.                 }  
  163.             });  
  164.             return convertView;  
  165.         }  
  166.     }  
  167. }  

理解了前一篇ListView(BaseAdapter)的这一篇应该很好理解了。就是把参数定义成了final,方便调用。

也可以按照前一篇的模式来写,我也感觉前一篇的模式比较好。

截图:那图片上面有123不是程序搞得。。。是自己把图片搞了一下。。。


http://blog.youkuaiyun.com/zhengliusu/article/details/7178681

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值