上一篇:http://www.bkjia.com/kf/201208/147770.html
前面介紹過的ListView, Gallery ,Spinner 等都是AdapterView 的子類,本例GridView 也是AdapterView的子類。AdapterView的顯示可以通過資料繫結來實現,資料來源可以是數組或是資料庫記錄,資料來源和AdapterView是通過Adapter作為橋樑。通過Adapter,AdatperView可以顯示資料來源或處理使用者選取事件,如:挑選清單中某項。
所有AdapterView的資料來源都是使用Adapter 作為橋樑, 不同的AdapterView,只是顯示資料來源的方式不同,ListView 以列表顯示顯示,Gallery以橫向畫廊方式,GridView則以二維網格的方式顯示,預設GridView根據所顯示的View大小自動計算出每列的個數,也可以通過GridView的setNumColumns(int numColumns)指定列數,或是setColumnWidth(int columnWidth)指定列寬。
本例使用AppsAdapter 讀取App Launcher 中所有應用的表徵圖。Adapter的getView 返回一ImageView:
[java]
public View getView(int position, View convertView,
ViewGroup parent) {
ImageView i;
if (convertView == null) {
i = new ImageView(Grid1.this);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new GridView.LayoutParams(50, 50));
} else {
i = (ImageView) convertView;
}
ResolveInfo info = mApps.get(position);
i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
return i;
}
public View getView(int position, View convertView,
ViewGroup parent) {
ImageView i;
if (convertView == null) {
i = new ImageView(Grid1.this);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new GridView.LayoutParams(50, 50));
} else {
i = (ImageView) convertView;
}
ResolveInfo info = mApps.get(position);
i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
return i;
}
Adapter可以返回任意類型的View,比如Button,TextView等,GridView或根據Adapter的getView返回的view 來顯示每一項。
同樣使用setAdapter 為GridView設定資料來源。
[java]
setContentView(R.layout.grid_1);
mGrid = (GridView) findViewById(R.id.myGrid);
mGrid.setAdapter(new AppsAdapter());
setContentView(R.layout.grid_1);
mGrid = (GridView) findViewById(R.id.myGrid);
mGrid.setAdapter(new AppsAdapter());
本例如果將GridView 改成ListView ,應用表徵圖將以列表顯示。ListView 和GridView使用同一資料來源,不同的只是表現形式(列表或是網格)。這樣可以看到對應同一資料來源,Android可以支援的表現形式非常多樣化。
前面介紹過的ListView, Gallery ,Spinner 等都是AdapterView 的子類,本例GridView 也是AdapterView的子類。AdapterView的顯示可以通過資料繫結來實現,資料來源可以是數組或是資料庫記錄,資料來源和AdapterView是通過Adapter作為橋樑。通過Adapter,AdatperView可以顯示資料來源或處理使用者選取事件,如:挑選清單中某項。
所有AdapterView的資料來源都是使用Adapter 作為橋樑, 不同的AdapterView,只是顯示資料來源的方式不同,ListView 以列表顯示顯示,Gallery以橫向畫廊方式,GridView則以二維網格的方式顯示,預設GridView根據所顯示的View大小自動計算出每列的個數,也可以通過GridView的setNumColumns(int numColumns)指定列數,或是setColumnWidth(int columnWidth)指定列寬。
本例使用AppsAdapter 讀取App Launcher 中所有應用的表徵圖。Adapter的getView 返回一ImageView:
[java]
public View getView(int position, View convertView,
ViewGroup parent) {
ImageView i;
if (convertView == null) {
i = new ImageView(Grid1.this);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new GridView.LayoutParams(50, 50));
} else {
i = (ImageView) convertView;
}
ResolveInfo info = mApps.get(position);
i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
return i;
}
public View getView(int position, View convertView,
ViewGroup parent) {
ImageView i;
if (convertView == null) {
i = new ImageView(Grid1.this);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new GridView.LayoutParams(50, 50));
} else {
i = (ImageView) convertView;
}
ResolveInfo info = mApps.get(position);
i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
return i;
}
Adapter可以返回任意類型的View,比如Button,TextView等,GridView或根據Adapter的getView返回的view 來顯示每一項。
同樣使用setAdapter 為GridView設定資料來源。
[java]
setContentView(R.layout.grid_1);
mGrid = (GridView) findViewById(R.id.myGrid);
mGrid.setAdapter(new AppsAdapter());
setContentView(R.layout.grid_1);
mGrid = (GridView) findViewById(R.id.myGrid);
mGrid.setAdapter(new AppsAdapter());
本例如果將GridView 改成ListView ,應用表徵圖將以列表顯示。ListView 和GridView使用同一資料來源,不同的只是表現形式(列表或是網格)。這樣可以看到對應同一資料來源,Android可以支援的表現形式非常多樣化。
作者:mapdigit