Android GridView 與 Base Adapter

  視圖組件也有運行時創建和在xml定義兩種途徑,在android常用的視圖中有一個比較重要的類,AdapterView適配器視圖,適配器視圖就是用適配器(Adapter)將視圖和該視圖所依賴的數據鏈接起來。在這裏用一個繼承自BaseView的GridView來分析一下。

  首先在xml文檔中定義GridView.

  <?xml version="1.0" encoding="utf-8"?>
  <GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:columnWidth="150dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="5dp"
    android:horizontalSpacing="5dp"
    android:stretchMode="columnWidth"
    android:gravity="center" />

  Android 中app或者widget UI的定義都是有兩種方式:1.在xml中定義。 2 運行時加載也就是在代碼中定義。這裏應用xml定義。

  接下來是Activity的實現。

  

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainview);
        ImageGridAdapter adapter = new ImageGridAdapter(this);
        GridView mGridView = (GridView) findViewById(R.id.gridview);
        mGridView.setAdapter(adapter);
        mGridView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
            }
            
        });
    }
  這裏ImageGridAdapter是我們自己定義的一個Adapter,用來實現聯繫的橋樑。setOnItemClickListener()給GridView 設置一個點擊監聽器。當用戶點擊每個圖標時會做出相應的動作。這種視圖中最關鍵的就是我們自己定義的適配器。

  實現ImageGridAdapter的具體如下:

  

public ImageGridAdapter(Context context) {
        // TODO Auto-generated constructor stub
        this.mContext = context;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return IConfig.IMGS.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ImageView iv = null;
        if(convertView ==null){
            iv = new ImageView(mContext);
            iv.setAdjustViewBounds(true);
            iv.setLayoutParams(new GridView.LayoutParams(150,150));
            iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
            iv.setPadding(1, 100, 1, 1);
        }else{
            iv = (ImageView)convertView;
        }
        iv.setImageResource(IConfig.IMGS[position]);
        return iv;
    }
  繼承BaseAdapter實現自己的適配器,主要要實現4個函數。

  首先getCount() 表示我們將要在適配器中展示多少個數據,這個函數必須重置,如果返回0,則不會有任何數據出現。本例中IConfig是一個接口,IMGS是一個整形數組,內容是drawable下圖片的ID。因爲此例主要是展示一些圖片的GridView。

  其次 getItem(int position) 返回固定位置上的對象,要明白的是你展示的是什麼數據,此函數返回的就是什麼類型。只是因爲java是單根繼承所以在此返回值是Object。如果要應用此函數必須清楚返回的類型。

  再次 getItemId() 返回具體位置data的ID,沒有什麼疑問。

  最重要的就是getView()這個函數設置了展示的內容的具體屬性(包括位置,大小等等),當這個函數被framework調用時,View才被傳入。首先positon表示數據的位置。convertView 要展示的對象,因爲這個對象有時侯會被回收,所以在程序中必須判斷是否爲空。如果爲空時我們就要自己定義要展示的具體內容。本例中就是對ImageView進行設置。如果不爲空則直接賦值。然後返回所要展示的對象(一個View)。

  這就是通過BaseAdapter 創建自己adapter的基本方式。

  因爲比較簡單,並且源碼大多已經展示,如果需要源碼可以給我留言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章