Android实战简易教程<二十>(GridView长按显示删除)

用过UC浏览器的都使用过如下功能:


长按图标会弹出删除的图标,我们下面研究一下如何实现类似效果。

1.配置main.xml文件:

[html]  view plain copy
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent" >  
  5.   
  6.   
  7.     <GridView  
  8.         android:id="@+id/gridView"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:numColumns="4" >  
  12.     </GridView>  
  13.   
  14.   
  15. </RelativeLayout>  

2.配置GridView的填充组件布局grid_item.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:id="@+id/ll_grid_item"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     android:gravity="center"  
  7.     android:orientation="vertical" >  
  8.   
  9.   
  10.     <FrameLayout  
  11.         android:id="@+id/starred_item_layout"  
  12.         android:layout_width="fill_parent"  
  13.         android:layout_height="wrap_content"  
  14.         android:layout_gravity="center" >  
  15.   
  16.   
  17.         <LinearLayout  
  18.             android:layout_width="fill_parent"  
  19.             android:layout_height="wrap_content"  
  20.             android:layout_marginRight="4dip"  
  21.             android:layout_marginTop="4dip"  
  22.             android:gravity="center"  
  23.             android:orientation="vertical" >  
  24.   
  25.   
  26.             <ImageView  
  27.                 android:id="@+id/img"  
  28.                 android:layout_width="60dip"  
  29.                 android:layout_height="55dip" />  
  30.   
  31.   
  32.             <TextView  
  33.                 android:id="@+id/name_tv"  
  34.                 android:layout_width="70dip"  
  35.                 android:layout_height="wrap_content"  
  36.                 android:layout_marginTop="10dip"  
  37.                 android:gravity="center"  
  38.                 android:textColor="@android:color/black"  
  39.                 android:textSize="15sp"  
  40.                 android:textStyle="bold" />  
  41.         </LinearLayout>  
  42.   
  43.   
  44.         <ImageView  
  45.             android:id="@+id/delete_markView"  
  46.             android:layout_width="20dip"  
  47.             android:layout_height="20dip"  
  48.             android:layout_gravity="right|top"  
  49.             android:adjustViewBounds="true"  
  50.             android:src="@drawable/delete"  
  51.             android:visibility="gone" />  
  52.     </FrameLayout>  
  53.   
  54.   
  55. </LinearLayout>  
3.adapter适配器文件:

[java]  view plain copy
  1. package com.example.longdemo;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5.   
  6. import android.content.Context;  
  7. import android.view.LayoutInflater;  
  8. import android.view.View;  
  9. import android.view.ViewGroup;  
  10. import android.widget.BaseAdapter;  
  11. import android.widget.ImageView;  
  12. import android.widget.TextView;  
  13.   
  14. public class GridViewAdapter extends BaseAdapter {  
  15.     private ArrayList<HashMap<String, Object>> myList;  
  16.     private Context mContext;  
  17.     private TextView name_tv;  
  18.     private ImageView img;  
  19.     private View deleteView;  
  20.     private boolean isShowDelete;// 根据这个变量来判断是否显示删除图标,true是显示,false是不显示  
  21.   
  22.     public GridViewAdapter(Context mContext,  
  23.             ArrayList<HashMap<String, Object>> myList) {  
  24.         this.mContext = mContext;  
  25.         // this.names=names;  
  26.         this.myList = myList;  
  27.     }  
  28.   
  29.     public void setIsShowDelete(boolean isShowDelete) {  
  30.         this.isShowDelete = isShowDelete;  
  31.         notifyDataSetChanged();  
  32.     }  
  33.   
  34.     @Override  
  35.     public int getCount() {  
  36.   
  37.         return myList.size();  
  38.     }  
  39.   
  40.     @Override  
  41.     public Object getItem(int position) {  
  42.         // TODO Auto-generated method stub  
  43.         return myList.get(position);  
  44.     }  
  45.   
  46.     @Override  
  47.     public long getItemId(int position) {  
  48.         // TODO Auto-generated method stub  
  49.         return position;  
  50.     }  
  51.   
  52.     @Override  
  53.     public View getView(int position, View convertView, ViewGroup parent) {  
  54.         convertView = LayoutInflater.from(mContext).inflate(R.layout.grid_item,  
  55.                 null);  
  56.         img = (ImageView) convertView.findViewById(R.id.img);  
  57.         name_tv = (TextView) convertView.findViewById(R.id.name_tv);  
  58.         deleteView = convertView.findViewById(R.id.delete_markView);  
  59.         deleteView.setVisibility(isShowDelete ? View.VISIBLE : View.GONE);// 设置删除按钮是否显示  
  60.         img.setBackgroundResource(myList.get(position).get("image").hashCode());  
  61.         name_tv.setText(myList.get(position).get("name").toString());  
  62.         return convertView;  
  63.     }  
  64. }  

4.MainActivity.java:

[java]  view plain copy
  1. package com.example.longdemo;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5.   
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.util.Log;  
  9. import android.view.View;  
  10. import android.widget.AdapterView;  
  11. import android.widget.AdapterView.OnItemClickListener;  
  12. import android.widget.AdapterView.OnItemLongClickListener;  
  13. import android.widget.GridView;  
  14.   
  15. public class MainActivity extends Activity implements OnItemLongClickListener {  
  16.   
  17.     private GridView mGridView;  
  18.     private GridViewAdapter mAdapter;  
  19.     private boolean isShowDelete = false;  
  20.     private ArrayList<HashMap<String, Object>> myList;  
  21.     final String[] name = new String[] { "test""testa""testb""testc""testd",  
  22.             "testf""testg" };  
  23.     final int[] pic = new int[] { R.drawable.pic,  
  24.             R.drawable.pic, R.drawable.pic,  
  25.             R.drawable.pic, R.drawable.pic,  
  26.             R.drawable.pic, R.drawable.pic };  
  27.   
  28.     @Override  
  29.     protected void onCreate(Bundle savedInstanceState) {  
  30.         super.onCreate(savedInstanceState);  
  31.         setContentView(R.layout.activity_main);  
  32.         mGridView = (GridView) findViewById(R.id.gridView);  
  33.         mGridView.setOnItemLongClickListener(this);//长按事件监听  
  34.         myList = getMenuAdapter(pic, name);  
  35.   
  36.         mAdapter = new GridViewAdapter(MainActivity.this, myList);  
  37.         mGridView.setAdapter(mAdapter);  
  38.   
  39.     }  
  40.   
  41.     @Override  
  42.     public boolean onItemLongClick(AdapterView<?> parent, View view,  
  43.             int position, long id) {  
  44.         if (isShowDelete) {  
  45.             isShowDelete = false;  
  46.   
  47.         } else {  
  48.             isShowDelete = true;  
  49.             mAdapter.setIsShowDelete(isShowDelete);  
  50.             mGridView.setOnItemClickListener(new OnItemClickListener() {  
  51.   
  52.                 @Override  
  53.                 public void onItemClick(AdapterView<?> parent, View view,  
  54.                         int position, long id) {  
  55.                     delete(position);//删除选中项  
  56.                     Log.i("------>""进来了么");  
  57.                     mAdapter = new GridViewAdapter(MainActivity.this, myList);//重新绑定一次adapter  
  58.                     mGridView.setAdapter(mAdapter);  
  59.                     mAdapter.notifyDataSetChanged();//刷新gridview  
  60.   
  61.                 }  
  62.   
  63.             });  
  64.         }  
  65.         Log.i("------>""进来了没");  
  66.   
  67.         mAdapter.setIsShowDelete(isShowDelete);//setIsShowDelete()方法用于传递isShowDelete值  
  68.   
  69.         return true;  
  70.     }  
  71.   
  72.       
  73.     private void delete(int position) {//删除选中项方法  
  74.         ArrayList<HashMap<String, Object>> newList = new ArrayList<HashMap<String, Object>>();  
  75.         if (isShowDelete) {  
  76.             myList.remove(position);  
  77.             isShowDelete = false;  
  78.         }  
  79.         newList.addAll(myList);  
  80.         myList.clear();  
  81.         myList.addAll(newList);  
  82.     }  
  83.   
  84.     private ArrayList<HashMap<String, Object>> getMenuAdapter(//将数据装入List  
  85.             int[] menuImageArray, String[] menuNameArray) {  
  86.         ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();  
  87.         for (int i = 0; i < menuImageArray.length; i++) {  
  88.             HashMap<String, Object> map = new HashMap<String, Object>();  
  89.             map.put("image", menuImageArray[i]);  
  90.             map.put("name", menuNameArray[i]);  
  91.             data.add(map);  
  92.         }  
  93.         return data;  
  94.     }  
  95.   
  96. }  

5.运行实例如下:

源码下载

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值