1. 程式人生 > >Android 開發:(八)初識GridView(九宮格佈局)

Android 開發:(八)初識GridView(九宮格佈局)

既然是初識,就按最簡單的走吧!
三步走:

第一步:GridView初始化

在主xml檔案新增一個gridview控制元件 :
< GridView
android:id=”@+id/gv_jianshi”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:layout_marginLeft=”@dimen/margin_3x”
android:gravity=”center”
android:listSelector=”@android:color/transparent”
android:numColumns=”4” //每行顯示條目
android:scrollbars=”none”
android:verticalSpacing=”@dimen/margin_4x” //列間距
android:horizontalSpacing=”@dimen/margin_4x”> //行間距

第二步:設定adapter

.activity檔案:
這個頁面主要有兩個事:

1.建立adapter: JS_Adapter 繼承 BaseAdapter(系統自帶顯示個數和佈局方法);
2. 設定JS_Adapter的物件js_adapter;

程式碼:

public class InformationQuery_MainPersonActivity extends BaseActivity {

private GridView  gv_jianshi;
private String JsData[] = {"劉備", "關羽", "張飛"};
//2.
private  JS_Adapter js_adapter;
@Override
protected void onCreate(Bundle arg0) {
    // TODO Auto-generated method stub
    super.onCreate(arg0);
    setContentView(R.layout.informationquery_keyperson);
    gv_jianshi = (GridView)findViewById(R.id.gv_jianshi); //建立關聯
    js_adapter = new JS_Adapter();  //JS_Adapter繼承與BaseAdapter 
    gv_jianshi.setAdapter(js_adapter);     //利用adapter新增item
    gv_jianshi.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // 點選事件:
        }
    });
}

//1. 建立一個JS_Adapter 繼承於BaseAdapter :

class JS_Adapter extends BaseAdapter {
@Override
類似於ios中uicollectionview的協議方法:
public int getCount() {

        // TODO Auto-generated method stub
        //顯示條目個數
        return JsData.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
        //顯示內容佈局(類似於ios的自定義cell過程)
        if (convertView == null) {
            convertView = View.inflate(當前activity.this, R.layout.item.xml, null);
        }
        //這裡用ViewHolderUtils封裝了一個與item關聯的方法(封裝了一下),也可以直接在這裡寫。
        Button button = ViewHolderUtils.get(convertView, R.id.info_personItem);
        button.setText(JsData[position]);
        return convertView;
    }
}

}

第三步、 item.xml

info_personItem.xml檔案:這裡面就是對每一個格子布局,具體每個格子裡顯示的樣子

< Button
android:id=”@+id/info_personItem”
style=”@style/gszwfw_list_content”
android:layout_width=”@dimen/margin_space_140”
android:layout_height=”@dimen/margin_space_45”
android:background=”@drawable/shape_corner_person”
android:clickable=”false”
android:focusable=”false”
android:text=”xxx”
android:textColor=”#8C8C8C” />

ViewHolderUtils:

package com.gsww.ipolicy.widget;

import android.util.SparseArray;
import android.view.View;
public class ViewHolderUtils {
/**
* 增加一個私有建構函式防止外部例項化
*/
private ViewHolderUtils() {
}
/**
*
* @功能 從快取中 獲取 View 控制元件 物件,如果不存在快取就初始化後放入快取,以備下次使用; 知識點:
* Android應用效能優化之使用SparseArray替代HashMap;
* @param view
* 當前Item 佈局 View
* @param id
* 當前Item中 某個View 的id值
* @return 當前Item中對應id的View物件
* @作者 2014-5-19 / wzy
*/
public static T get(View view, int id) {
SparseArray viewHodler = (SparseArray) view.getTag();
if (viewHodler == null) {
viewHodler = new SparseArray();
view.setTag(viewHodler);
}
View childView = viewHodler.get(id);
if (childView == null) {
childView = view.findViewById(id);
viewHodler.put(id, childView);
}
return (T) childView;
}
}