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

百戰(zhàn)經(jīng)典第十一戰(zhàn)-GridView動態(tài)添加Item

在實際開發(fā)項目中,本實例經(jīng)常被用到,GridView的最后項顯示一個增加圖片的按鈕,點擊該按鈕可以動態(tài)增加Item。

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/gv_test"  
        android:numColumns="3"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent" />  
</RelativeLayout>  

布局文件很簡單,在相對布局中引入了一個gridview控件,numColumns屬性指定了一行顯示3項。

2.grid_item.xml:

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:orientation="vertical" >  
    <ImageView  
        android:id="@+id/item"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content" />  
</LinearLayout>  

gridview的子布局就一個imageview控件,用于顯示圖片。

3.GridViewAdapter.java:

package com.yayun.gridviewdemo; 
//省略導(dǎo)入 
public class GridViewAdapter extends BaseAdapter {  
    private Context context;  
    private List<Integer> list;  
    LayoutInflater layoutInflater;  
    private ImageView mImageView;  
    public GridViewAdapter(Context context, List<Integer> list) {  
        this.context = context;  
        this.list = list;  
        layoutInflater = LayoutInflater.from(context);  
    }  
    @Override  
    public int getCount() {  
        return list.size()+1;//注意此處  
    }  
    @Override  
    public Object getItem(int position) {  
        return list.get(position);  
    }  
    @Override  
    public long getItemId(int position) {  
        return position;  
    }  
    @Override  
    public View getView(int position, View convertView, ViewGroup parent) {  
        convertView = layoutInflater.inflate(R.layout.grid_item, null);  
        mImageView = (ImageView) convertView.findViewById(R.id.item);  
        if (position < list.size()) {  
            mImageView.setBackgroundResource(list.get(position));  
        }else{  
            mImageView.setBackgroundResource(R.drawable.pic3);//最后一個顯示加號圖片  
        }  
        return convertView;  
    }  
} 

創(chuàng)建適配器類,繼承自BaseAdapter適配器,適配器類構(gòu)造方法傳入上下文對象context和數(shù)據(jù)集合List。要注意的地方,getCount方法返回的數(shù)量要加1,這個就是存放“+”的地方。在getView方法中,進(jìn)行判斷,最后一個位置設(shè)置加號圖片。

4.MainActivity.java:

package com.yayun.gridviewdemo;  
  //省略導(dǎo)入的包 
public class MainActivity extends ActionBarActivity {  
    private List<Integer> mDatas;  
private GridView mGridView;  
private GridViewAdapter adapter;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        mGridView=(GridView) findViewById(R.id.gv_test);  
        initDatas(); //初始化數(shù)據(jù) 
        adapter=new GridViewAdapter(MainActivity.this,mDatas);  
        mGridView.setAdapter(adapter);  
        mGridView.setOnItemClickListener(new OnItemClickListener() {  
            @Override  
            public void onItemClick(AdapterView<?> parent, View view,  
                    int position, long id) {  
                if(position==parent.getChildCount()-1){  
                    mDatas.add(R.drawable.pic1);  
                    Toast.makeText(MainActivity.this, "您點擊了添加", 1).show();  
                    adapter=new GridViewAdapter(MainActivity.this, mDatas);  
                    mGridView.setAdapter(adapter);  
                    adapter.notifyDataSetChanged();  
                }    
            }  
        });     
    }  
    private void initDatas() {  
        mDatas=new ArrayList<>();  
        mDatas.add(R.drawable.pic1);  
        mDatas.add(R.drawable.pic1);  
        mDatas.add(R.drawable.pic1);  
        mDatas.add(R.drawable.pic1);  
        mDatas.add(R.drawable.pic1);  
      }  
    } 

設(shè)置了GridView的setOnItemClickListener監(jiān)聽事件,由條件:position==parent.getChildCount()-1判斷是否點擊了最后一個帶有加號圖片的項目,若單擊了則重新生成一項加入到mDatas中去,并調(diào)用notifyDataSetChanged方法重繪GridView控件。

運行項目:

這里寫圖片描述

點擊最后一個+圖片,可以動態(tài)增加item。