mishaki 2015-02-13
Gridview 使用
本例子主要用 :
1 SimpleAdapter 作为适配器加载List<Map>数据
2 BaseAdapter 加载List<Map>数据 两种形式作为适配器加载数据
package com.example.fragmentdemo1; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; /** * Gridview 使用 * 本例子主要用 : * 1 SimpleAdapter 作为适配器加载List<Map>数据 * 2 BaseAdapter 加载List<Map>数据 两种形式作为适配器加载数据 */ public class GradViewActivity extends Activity { private Integer[] resIds = { R.drawable.bd, R.drawable.qq, R.drawable.safari, R.drawable.shezhi, R.drawable.tongxunlu, R.drawable.wangyi, R.drawable.weixin, R.drawable.xj, R.drawable.yx, R.drawable.zp }; private String[] name = { "百度", "QQ", "safari", "设置", "通讯录", "网易", "微信", "相机", "游戏", "照片" }; private ArrayList<HashMap<String, Object>> item;// 数据 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.griditeminfo); //显示简单的图片列表 // showSimpleGrad(); showBaseAdapterGrad(); } /** * 显示grid列表 ,用SimpleAdapter 作为适配器 */ private void showSimpleGrad() { getData() ;//准备数据 GridView gridview = (GridView) findViewById( R.id.gridview); // SimpleAdapter对象,匹配ArrayList中的元素 SimpleAdapter simpleAdapter = new SimpleAdapter(this, item, //数据来源 R.layout.gridview, //每一个格子中的布局加载 new String[] { "itemImage", "itemName" }, //每一个方格中列的名字,它会与Map中的key相对应 new int[] { R.id.itemImage, R.id.itemName }) {//对应着上面参数给的值 }; //添加并且显示 gridview.setAdapter(simpleAdapter); //添加消息处理 gridview.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //parent.getItemAtPosition( ) Log.v("gradView", (String)item.get(position ).get("itemName")) ; Toast.makeText(getApplicationContext(),(String) item.get(position ).get("itemName"),Toast.LENGTH_SHORT).show(); } }); } // 准备数据 public void getData() { item = new ArrayList<HashMap<String, Object>>(); for (int i = 0; i < resIds.length; i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("itemImage", resIds[i]); map.put("itemName", name[i]); item.add(map); } } //使用BaseAdapter private void showBaseAdapterGrad() { getData() ;//准备数据 GridView gridview = (GridView) findViewById( R.id.gridview); ImageAdapter adapter = new ImageAdapter(this); //添加并且显示 gridview.setAdapter(adapter); //添加消息处理 gridview.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //parent.getItemAtPosition( ) 取出 相应的数据 Log.v("gradView", (String)item.get(position ).get("itemName")) ; Toast.makeText(getApplicationContext(),(String) item.get(position ).get("itemName"),Toast.LENGTH_SHORT).show(); } }); } //用BaseAdapter 用作adapter private class ImageAdapter extends BaseAdapter{ private LayoutInflater mInflater;// 得到一个LayoutInfalter对象用来导入布局 //private Context mContext; public ImageAdapter(Context context) { //this.mContext=context; this.mInflater = LayoutInflater.from(context); } @Override public int getCount() { return resIds.length; } @Override public Object getItem(int position) { return resIds[position]; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } /** * 每一个小的 方格中的控件的加载 */ @Override public View getView(int position, View convertView, ViewGroup parent) { //定义一个ImageView,显示在GridView里 convertView = mInflater.inflate(R.layout.gridview, null); ImageView imageView = (ImageView) convertView.findViewById( R.id.itemImage); TextView textView = (TextView) convertView.findViewById( R.id.itemName); Log.v("GridView", "加载GridView:getView 1=="+position ); imageView.setImageResource((Integer)item.get(position ).get("itemImage")); textView.setText( (String)item.get(position ).get("itemName")); Log.v("GridView", "加载GridView:getView 2"); // if(convertView==null){ // imageView=new ImageView(mContext); // imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); // imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); // imageView.setPadding(8, 8, 8, 8); // }else{ // imageView = (ImageView) convertView; // } //imageView.setImageResource(mThumbIds[position]); return convertView; } } }
2 gridView的布局
<?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" android:paddingTop="20dp"> <GridView android:id="@+id/gridview" android:layout_width="match_parent" android:layout_height="match_parent" android:columnWidth="90dp" android:numColumns="auto_fit" android:stretchMode="columnWidth" android:horizontalSpacing="10dp"> </GridView> </LinearLayout>
3 每个方格中加载的数据的控件布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/itemImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" > </ImageView> <TextView android:id="@+id/itemName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/itemImage" android:layout_centerHorizontal="true" > </TextView> </RelativeLayout>
4 附件中是使用到的图片