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;
}
}