GridView的使用

来源:互联网 发布:乐贝网络校园招聘 编辑:程序博客网 时间:2024/06/09 17:10

GridView的使用

  • 当我们在安卓开发时想要实现上图所示的矩阵式的按钮的效果时,就要考虑使用GridView控件了。

代码详解

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <GridView        android:id="@+id/gv_type"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:numColumns="4"        android:horizontalSpacing="1dp"        android:verticalSpacing="2dp"        >    </GridView></RelativeLayout>
  • 这是我们的activity_main布局,使用了一个GridView控件。其中,android:horizontalSpacing=”1dp” 表示水平间距;android:verticalSpacing=”2dp” 表示垂直间距;android:numColumns=”4” 表示有gridview里的item有4列。
  • 你可能会想到为什么没有设置行数呢?实际上系统会根据你添加的item个数自动添加行数。如按照这里的设置,总共8个item就有2行,9个item就有3行了。

public class MainActivity extends Activity {    private int icon[] = { R.drawable.ic_category_0, R.drawable.ic_category_1,            R.drawable.ic_category_2, R.drawable.ic_category_3,            R.drawable.ic_category_4, R.drawable.ic_category_5,            R.drawable.ic_category_6, R.drawable.ic_category_7 };    private String iconName[] = { "美食", "电影", "酒店", "KTV", "健康丽人", "休闲娱乐",            "今日新单", "全部分类" };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        GridView gvType = (GridView) findViewById(R.id.gv_type);        gvType.setAdapter(new MyGrideViewAdapter());        gvType.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view,                    int position, long id) {                Toast.makeText(MainActivity.this, iconName[position], Toast.LENGTH_SHORT).show();             }        });    }    class MyGrideViewAdapter extends BaseAdapter {        public ArrayList<Picture> picList;        public MyGrideViewAdapter(){            picList = new ArrayList<Picture>();            for(int i=0; i<icon.length; i++){                Picture pic = new Picture(icon[i], iconName[i]);                picList.add(pic);            }        }        @Override        public int getCount() {            if(picList != null)                return picList.size();            else                return 0;        }        @Override        public Picture getItem(int position) {            return picList.get(position);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder holder = null;            if(convertView == null){                convertView = View.inflate(getApplicationContext(), R.layout.item_gv, null);                holder = new ViewHolder();                holder.ivItem = (ImageView) convertView.findViewById(R.id.iv_item);                holder.tvItem = (TextView) convertView.findViewById(R.id.tv_item);                convertView.setTag(holder);            }else{                holder = (ViewHolder) convertView.getTag();            }            holder.ivItem.setImageResource(getItem(position).getPictureId());            holder.tvItem.setText(getItem(position).getPictureName());            return convertView;        }    }    static class ViewHolder{        public ImageView ivItem;        public TextView tvItem;    }}
  • 在MainActivity我们先设置了两个数组用来填充GridView的item的图片及其文字描述。
  • 在为gridView设置适配器时,自然需要一个集合去存放item所需的图片及其文字描述。这里我们做了一个javabean对象(下面会给出代码)Picture来封装这两个属性。然后就向一个arraylist里添加这个picture对象即可。
  • MyGrideViewAdapter继承了BaseAdapter仍然是一个标准的适配器写法。需要注意的是我们重写了这个适配器的构造方法,以便在这里初始化我们的集合(适配器中填充item所需的集合对象经常会在适配器的构造里去完成)。

public class Picture {    private int pictureId;    private String pictureName;    /**     * 构造     * @param pictureId 图片资源id     * @param pictureName 图片说明文字     */    public Picture(int pictureId, String pictureName) {        super();        this.pictureId = pictureId;        this.pictureName = pictureName;    }    public int getPictureId() {        return pictureId;    }    public void setPictureId(int pictureId) {        this.pictureId = pictureId;    }    public String getPictureName() {        return pictureName;    }    public void setPictureName(String pictureName) {        this.pictureName = pictureName;    }}
  • 这里就是Picture这个javabean了。
1 0
原创粉丝点击