TestGridViewActivity如下:
package cn.com.baidu; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.GridView; import android.widget.LinearLayout; import android.widget.SimpleAdapter; import android.widget.TextView; //Demo描述: //GridView基础知识使用示例 //PS:这是以前刚学Android的时候写的了,今天整理博客还是舍不得扔掉 //2014年8月4日23:19:41 //注意: //1 GridView和ListView的数据的绑定非常相似.在hashMap.put("col1", drawableIDs[i]);处我们往此hashMap里 // 放入的是图片的ID(即在R文件中生成的图片ID),而不是真正的图片数据.在绑定时系统会根据此ID自动加载对应的图片 //2 方法 new SimpleAdapter(this, createDataList(), R.layout.grid_row, new String []{"col1","col2"}, new int []{R.id.ImageView_grid_row,R.id.TextView_grid_row}); // gridView.setAdapter(simpleAdapter);此方法的参数和使用ListView时的适配器参数基本上一样的 // 第一个参数:上下文对象 // 第二个参数:要被绑定的数据(List) // 第三个参数:接收此绑定的数据的布局 // 第四个参数:被绑定数据的键 // 第五个参数:把这些键分别绑到布局的哪个控件中 // 第二和三个参数是从宏观来描述的,第四和五个参数是从微观的角度进一步描述的 //3 此例中分别监听获得焦点和被点击的处理情况.这点很有借鉴意义 public class TestGridViewActivity extends Activity { private GridView gridView; private ArrayList<Map<String,Object>> arrayList; private TextView textView; int drawableIDs []={R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e}; int jjs []={R.string.jja,R.string.jjb,R.string.jjc,R.string.jjd,R.string.jje}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); gridView=(GridView) findViewById(R.id.GridView); SimpleAdapter simpleAdapter= new SimpleAdapter(this, createDataList(), R.layout.grid_row, new String []{"col1","col2"}, new int []{R.id.ImageView_grid_row,R.id.TextView_grid_row}); //为GridView设置适配器 gridView.setAdapter(simpleAdapter); //当条目获得焦点时的处理 gridView.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { textView=(TextView) findViewById(R.id.TextView); //获得焦点的条目.每个条目都是一个LinearLayout LinearLayout linearLayout=(LinearLayout) view; //获得此条目中的TextView显示的名字.从0开始,所以为1 TextView childTextView=(TextView) linearLayout.getChildAt(1); //然后在另外一个(即主TextView)中显示 textView.setText(childTextView.getText().toString()); } @Override public void onNothingSelected(AdapterView<?> parent) {} }); //当条目获被点击时的处理.同上. gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view,int position, long id) { textView=(TextView) findViewById(R.id.TextView); LinearLayout linearLayout=(LinearLayout) view; TextView childTextView=(TextView) linearLayout.getChildAt(1); textView.setText(childTextView.getText().toString()); } }); } public List createDataList(){ arrayList=new ArrayList<Map<String,Object>>(); for(int i=0;i<jjs.length;i++){ HashMap<String, Object> hashMap=new HashMap<String, Object>(); //第一列为照片 hashMap.put("col1", drawableIDs[i]); //第二列为名字 hashMap.put("col2", this.getString(jjs[i])); arrayList.add(hashMap); } return arrayList; } }
main.xml如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/TextView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/tip" android:textColor="@color/white" android:textSize="24dip" > </TextView> <GridView android:id="@+id/GridView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:verticalSpacing="5dip" android:horizontalSpacing="5dip" android:stretchMode="columnWidth" > </GridView> </LinearLayout>
grid_row.xml如下:
<?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="horizontal" android:id="@+id/linerLayout_grid_row" > <ImageView android:id="@+id/ImageView_grid_row" android:scaleType="fitXY" android:layout_width="100dip" android:layout_height="98dip" > </ImageView> <TextView android:id="@+id/TextView_grid_row" android:layout_width="140dip" android:layout_height="wrap_content" android:textColor="@color/white" android:textSize="24dip" android:paddingLeft="5dip" > </TextView> </LinearLayout>