鍍金池/ 教程/ Android/ 百戰(zhàn)經(jīng)典第十二戰(zhàn)-GridView動(dòng)態(tài)刪除Item
百戰(zhàn)經(jīng)典第二十戰(zhàn)-ListView中點(diǎn)擊button跳轉(zhuǎn)到撥號(hào)界面實(shí)例
百戰(zhàn)經(jīng)典第十一戰(zhàn)-GridView動(dòng)態(tài)添加Item
百戰(zhàn)經(jīng)典第二戰(zhàn)-好玩的Spinner控件
百戰(zhàn)經(jīng)典第五戰(zhàn)-各種對(duì)話(huà)框Dialog精彩薈萃
百戰(zhàn)經(jīng)典第八戰(zhàn)-BitmapFactory.Options對(duì)資源圖片進(jìn)行縮放
百戰(zhàn)經(jīng)典第四戰(zhàn)-玩轉(zhuǎn)ListView
百戰(zhàn)經(jīng)典第十五-竊聽(tīng)風(fēng)云之短信監(jiān)聽(tīng)
前言
百戰(zhàn)經(jīng)典第十四戰(zhàn)-網(wǎng)絡(luò)交互,基于Baas用戶(hù)表查詢(xún)功能實(shí)現(xiàn)
百戰(zhàn)經(jīng)典第九戰(zhàn)-ViewFlipper實(shí)現(xiàn)幻燈效果
百戰(zhàn)經(jīng)典第三戰(zhàn)-實(shí)現(xiàn)畫(huà)圖板
百戰(zhàn)經(jīng)典第十七戰(zhàn)-基于加速度傳感器的搖一搖功能實(shí)例
百戰(zhàn)經(jīng)典第十戰(zhàn)-LayoutAnimation布局動(dòng)畫(huà)效果
百戰(zhàn)經(jīng)典第七戰(zhàn)-顯示倒計(jì)時(shí)的Button按鈕
百戰(zhàn)經(jīng)典第六戰(zhàn)-Activity啟動(dòng)模式小樣
百戰(zhàn)經(jīng)典第十二戰(zhàn)-GridView動(dòng)態(tài)刪除Item
百戰(zhàn)經(jīng)典第十六戰(zhàn)-圖片或頭像設(shè)置功能
百戰(zhàn)經(jīng)典第十九戰(zhàn)-短信監(jiān)聽(tīng)實(shí)現(xiàn)驗(yàn)證碼自動(dòng)填入
百戰(zhàn)經(jīng)典第一戰(zhàn)—聽(tīng)話(huà)的TextView
百戰(zhàn)經(jīng)典第十八戰(zhàn)-自定義控件實(shí)現(xiàn)一鍵清空輸入框
百戰(zhàn)經(jīng)典第十三戰(zhàn)-網(wǎng)絡(luò)交互,基于Baas實(shí)現(xiàn)用戶(hù)注冊(cè)功能

百戰(zhàn)經(jīng)典第十二戰(zhàn)-GridView動(dòng)態(tài)刪除Item

用過(guò)UC瀏覽器的都熟悉如下功能:

這里寫(xiě)圖片描述

長(zhǎng)按圖標(biāo)會(huì)彈出刪除的圖標(biāo),點(diǎn)擊刪除會(huì)刪除此項(xiàng)Item,下面研究一下如何實(shí)現(xiàn)類(lèi)似效果。

1.配置布局main.xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent" >  
    <GridView  
        android:id="@+id/gridView"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:numColumns="4" >  
    </GridView>  
</RelativeLayout>  

2.配置GridView的填充組件布局 grid_item.xml:

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:id="@+id/ll_grid_item"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:gravity="center"  
    android:orientation="vertical" >  
    <FrameLayout  
        android:id="@+id/starred_item_layout"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:layout_gravity="center" >  
        <LinearLayout  
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content"  
            android:layout_marginRight="4dip"  
            android:layout_marginTop="4dip"  
            android:gravity="center"  
            android:orientation="vertical" >  
            <ImageView  
                android:id="@+id/img"  
                android:layout_width="60dip"  
                android:layout_height="55dip" />  
            <TextView  
                android:id="@+id/name_tv"  
                android:layout_width="70dip"  
                android:layout_height="wrap_content"  
                android:layout_marginTop="10dip"  
                android:gravity="center"  
                android:textColor="@android:color/black"  
                android:textSize="15sp"  
                android:textStyle="bold" />  
        </LinearLayout>  
        <ImageView  
            android:id="@+id/delete_markView"  
            android:layout_width="20dip"  
            android:layout_height="20dip"  
            android:layout_gravity="right|top"  
            android:adjustViewBounds="true"  
            android:src="@drawable/delete"  
            android:visibility="gone" />  
    </FrameLayout>  
</LinearLayout> 

設(shè)置了id為delete_markView的ImageView的layout_gravity屬性為right|top,說(shuō)明該圖片位于右上角,設(shè)置了其visibility為gone,說(shuō)明該圖片初始時(shí)是不顯示的,后期可以控制該圖片的顯示。

3.adapter適配器文件:

package com.example.longdemo;  
//省略導(dǎo)入包
public class GridViewAdapter extends BaseAdapter {  
    private ArrayList<HashMap<String, Object>> myList;  
    private Context mContext;  
    private TextView name_tv;  
    private ImageView img;  
    private View deleteView;  
    private boolean isShowDelete=false;// 根據(jù)這個(gè)變量來(lái)判斷是否顯示刪除圖標(biāo),true是顯示,false是不顯示  
    public GridViewAdapter(Context mContext,  
            ArrayList<HashMap<String, Object>> myList) {  
        this.mContext = mContext;  
        // this.names=names;  
        this.myList = myList;  
    }  
    public void setIsShowDelete(boolean isShowDelete) {  
        this.isShowDelete = isShowDelete;  
        notifyDataSetChanged();  
    }  
    @Override  
    public int getCount() {  
        return myList.size();  
    }  
    @Override  
    public Object getItem(int position) {  
        return myList.get(position);  
    }  
    @Override  
    public long getItemId(int position) {  
        return position;  
    }  
    @Override  
    public View getView(int position, View convertView, ViewGroup parent) {  
        convertView = LayoutInflater.from(mContext).inflate(R.layout.grid_item,  
                null);  
        img = (ImageView) convertView.findViewById(R.id.img);  
        name_tv = (TextView) convertView.findViewById(R.id.name_tv);  
        deleteView = convertView.findViewById(R.id.delete_markView);  
        deleteView.setVisibility(isShowDelete ? View.VISIBLE : View.GONE);// 設(shè)置刪除按鈕是否顯示  
        img.setBackgroundResource(myList.get(position).get("image").hashCode());  
        name_tv.setText(myList.get(position).get("name").toString());  
        return convertView;  
    }  
}

設(shè)置變量isShowDelete標(biāo)識(shí)是否顯示刪除圖標(biāo),默認(rèn)是false 不顯示,在getView方法中通過(guò)判斷該標(biāo)識(shí),使用setVisibility方法控制刪除圖標(biāo)的顯示。同時(shí)定義了setIsShowDelete方法,供調(diào)用出調(diào)用以傳入isShowDelete參數(shù)的值。

4.MainActivity.java:

package com.example.longdemo;  
  //省略導(dǎo)入包
public class MainActivity extends Activity implements OnItemLongClickListener {  
    private GridView mGridView;  
    private GridViewAdapter mAdapter;  
    private boolean isShowDelete = false;  
    private ArrayList<HashMap<String, Object>> myList;  
    final String[] name = new String[] { "test", "testa", "testb", "testc", "testd",  
            "testf", "testg" };  
    final int[] pic = new int[] { R.drawable.pic,  
            R.drawable.pic, R.drawable.pic,  
            R.drawable.pic, R.drawable.pic,  
            R.drawable.pic, R.drawable.pic };  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        mGridView = (GridView) findViewById(R.id.gridView);  
        mGridView.setOnItemLongClickListener(this);//長(zhǎng)按事件監(jiān)聽(tīng)  
        myList = getMenuAdapter(pic, name);  

        mAdapter = new GridViewAdapter(MainActivity.this, myList);  
        mGridView.setAdapter(mAdapter);  
    }  
    @Override  
    public boolean onItemLongClick(AdapterView<?> parent, View view,  
            int position, long id) {  
        if (isShowDelete) {  
            isShowDelete = false;  
        } else {  
            isShowDelete = true;  
            mAdapter.setIsShowDelete(isShowDelete);  
            mGridView.setOnItemClickListener(new OnItemClickListener() {  
                @Override  
                public void onItemClick(AdapterView<?> parent, View view,  
                        int position, long id) {  
                    delete(position);//刪除選中項(xiàng)  
                    Log.i("------>", "進(jìn)來(lái)了么");  
                    mAdapter = new GridViewAdapter(MainActivity.this, myList);//重新綁定一次adapter  
                    mGridView.setAdapter(mAdapter);  
                    mAdapter.notifyDataSetChanged();//刷新gridview  
                }  
            });  
        }  
        Log.i("------>", "進(jìn)來(lái)了沒(méi)");  
        mAdapter.setIsShowDelete(isShowDelete);//setIsShowDelete()方法用于傳遞isShowDelete值  
        return true;  
    }  
    private void delete(int position) {//刪除選中項(xiàng)方法  
        ArrayList<HashMap<String, Object>> newList = new ArrayList<HashMap<String, Object>>();  
        if (isShowDelete) {  
            myList.remove(position);  
            isShowDelete = false;  
        }  
        newList.addAll(myList);  
        myList.clear();  
        myList.addAll(newList);  
    }  
    private ArrayList<HashMap<String, Object>> getMenuAdapter(//將數(shù)據(jù)裝入List  
            int[] menuImageArray, String[] menuNameArray) {  
        ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();  
        for (int i = 0; i < menuImageArray.length; i++) {  
            HashMap<String, Object> map = new HashMap<String, Object>();  
            map.put("image", menuImageArray[i]);  
            map.put("name", menuNameArray[i]);  
            data.add(map);  
        }  
        return data;  
    }  
}  

MainActivity實(shí)現(xiàn)了OnItemLongClickListener 接口,監(jiān)聽(tīng)GridView的長(zhǎng)按事件。同時(shí)設(shè)置了isShowDelete 變量用于記錄刪除圖片的顯示和隱藏,設(shè)置時(shí)調(diào)用setIsShowDelete()方法用于傳遞isShowDelete值到適配器類(lèi)中。設(shè)置了Map集合存儲(chǔ)image和string的值,可以參照注釋進(jìn)行理解。

5.運(yùn)行實(shí)例如下:

這里寫(xiě)圖片描述

效果已經(jīng)實(shí)現(xiàn),結(jié)合上一節(jié)的動(dòng)態(tài)添加,可以實(shí)現(xiàn)動(dòng)態(tài)添加和刪除的功能。