Android中GridView的使用

来源:互联网 发布:js获取div的内容 编辑:程序博客网 时间:2024/05/17 07:29

一、相对于listView与recycleView来说,gridView有相对的优势,gridView根据数据类的数量来生成多少个,如果有一天数据的数量发生了改变,gridView会自动去适应。而这一点listView与recycleView是决定做不到的。

二、官方文档:GridView
extends AbsListView
A view that shows items in two-dimensional scrolling grid. The items in the grid come from the ListAdapter associated with this view.

大致意思:显示数据表格
继承 AbsListView
一个视图显示在二维网格滚动视图显示项。网格中的显示项来自ListAdapter与这一观点。
  
三、使用:
1.显示一张图片的gridView:

这里写图片描述

MainActivity中:

public class MainActivity extends AppCompatActivity {    private GridView gridView;    private MainAdapter mainAdapter;    private int[] images;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        gridView = (GridView) findViewById(R.id.gv);        mainAdapter = new MainAdapter(this);        images = new int[]{R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher,                R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher};        //GridView的点击事件        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {                Toast.makeText(MainActivity.this, "点击了" + i, Toast.LENGTH_SHORT).show();            }        });        mainAdapter.setImages(images);        gridView.setAdapter(mainAdapter);    }}

MainActivity的布局文件:

<?xml version="1.0" encoding="utf-8"?><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"    tools:context="com.example.mac.gridviewdemo.MainActivity">    <GridView        android:id="@+id/gv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:horizontalSpacing="10dp"        android:numColumns="4"android:stretchMode="columnWidth"        android:verticalSpacing="10dp" />    <!--numColumns:设置列数    horizontalSpacing:设置水平间隔    verticalSpacing:设置垂直间隔stretchMode:定义列应如何拉伸以填充可用的空白,如果有的话。值必须是:        none: 延长被禁止。        spacingWidth: 每一列之间的间距被拉伸。        columnWidth: 每列被均等地拉伸。        spacingWidthUniform: 每一列之间的间距被均匀拉伸。--></RelativeLayout>

MainAdapter:

package com.example.mac.gridviewdemo;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;/** * Created by mac on 16-8-11. */public class MainAdapter extends BaseAdapter {    private Context context;    private int[] images;    public void setImages(int[] images) {        this.images = images;        notifyDataSetChanged();    }    public MainAdapter(Context context) {        this.context = context;    }    @Override    public int getCount() {        return images.length;    }    @Override    public Object getItem(int i) {        return i;    }    @Override    public long getItemId(int i) {        return i;    }    @Override    public View getView(int i, View view, ViewGroup viewGroup) {        MyView myView = null;        if (view == null) {            view = LayoutInflater.from(context).inflate(R.layout.item, viewGroup, false);            myView = new MyView(view);            view.setTag(myView);        }else {            myView = (MyView) view.getTag();        }        //设置数据        myView.imageView.setImageResource(images[i]);        //设置边界对齐        myView.imageView.setAdjustViewBounds(false);        //设置刻度的类型        myView.imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);        //设置间距        myView.imageView.setPadding(10,10,10,10);        return view;    }    class MyView {        private ImageView imageView;        MyView(View itemView) {            imageView = (ImageView) itemView.findViewById(R.id.iv);        }    }}

item的布局文件:

<?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">    <ImageView        android:id="@+id/iv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@mipmap/ic_launcher" /></LinearLayout>

2.显示一张图片和文字的

这里写图片描述

TwoActivity:

package com.example.mac.gridviewdemo;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.widget.GridView;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * Created by mac on 16-8-11. */public class TwoActivity extends AppCompatActivity {    private GridView gridView;    private int[] images;    private TwoAdapter twoAdapter;    List<Map<String, Object>> list = new ArrayList<>();    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_two);        twoAdapter = new TwoAdapter(this);        gridView = (GridView) findViewById(R.id.two_gv);        images = new int[]{R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher,                R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher};        for (int i = 0; i < images.length; i++) {            Map<String, Object> map = new HashMap<>();            map.put("iamge", images[i]);            map.put("text", "测试" + i);            list.add(map);        }        twoAdapter.setList(list);        gridView.setAdapter(twoAdapter);    }}

TwoActivity的布局文件:

<?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">    <GridView        android:id="@+id/two_gv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:horizontalSpacing="10dp"        android:numColumns="2"        android:verticalSpacing="10dp"        /></LinearLayout>

TwoAdapter:

package com.example.mac.gridviewdemo;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import java.util.List;import java.util.Map;/** * Created by mac on 16-8-11. */public class TwoAdapter extends BaseAdapter {    private Context context;    private List<Map<String, Object>> list;    public void setList(List<Map<String, Object>> list) {        this.list = list;        notifyDataSetChanged();    }    public TwoAdapter(Context context) {        this.context = context;    }    @Override    public int getCount() {        return list.size();    }    @Override    public Object getItem(int i) {        return i;    }    @Override    public long getItemId(int i) {        return i;    }    @Override    public View getView(int i, View view, ViewGroup viewGroup) {        Twoview twoview = null;        if (view == null) {            view = LayoutInflater.from(context).inflate(R.layout.item_two, viewGroup,false);            twoview = new Twoview(view);            view.setTag(twoview);        } else {            twoview = (Twoview) view.getTag();        }        //设置数据        int a = (int) list.get(i).get("iamge");        String name = (String) list.get(i).get("text");        twoview.imageView.setImageResource(a);        twoview.textView.setText(name);        return view;    }    class Twoview {        private ImageView imageView;        private TextView textView;        Twoview(View itemView) {           imageView = (ImageView) itemView.findViewById(R.id.item_two_iv);            textView = (TextView) itemView.findViewById(R.id.item_two_tv);        }    }}

item的布局文件:

<?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">    <ImageView        android:id="@+id/item_two_iv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@mipmap/ic_launcher" />    <TextView        android:id="@+id/item_two_tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="aa" /></LinearLayout>

四、gridView添加点击事件的时候,需要注意一下,有人写完之后发现点击事件为什么会不好用呢?起始你仔细看一下,是不是你的item布局中的子视图是Button,你把Button改了TextView就好了,可有人就会问为什么需要改了呢?因为Button会剥夺焦点事件,所以会使gridView的点击事件不好用。

本人菜鸟一个,有什么不对的地方希望大家指出评论,大神勿喷,希望大家一起学习进步!

0 1
原创粉丝点击