GridView 跟ListView 很类似,Listview 主要以列表形式显示数据,GridView 则是以网格形式显示数据,掌握ListView 使用方法后,会很轻松的掌握GridView的使用方法。本篇文章主要知识点如下



  1. GridView 主要使用方法
  2. GridView 使用Demo


继承关系如下

java.lang.Object
  ↳    android.view.View
      ↳    android.view.ViewGroup
          ↳    android.widget.AdapterView<android.widget.ListAdapter>
              ↳    android.widget.AbsListView
                  ↳    android.widget.GridView

1. GridView 主要使用方法

GridView 主要通过使用自定义BaseAdapter 来适配数据,进而显示到GridView中。主要使用方法如下:


  1. 准备数据源



  1. 为数据源设置适配器



  1. 将适配过后点数据显示在GridView 上


2. GridView 使用Demo

  • 实现效果如下


GridView

  • 实现代码如下
public class GridViewMethod extends AppCompatActivity {

   private GridView gridView;
   private List<Map<String, Object>> list;
   private int images[] = {R.mipmap.gril, R.mipmap.ic_launcher, R.mipmap.gril,
           R.mipmap.ic_launcher, R.mipmap.gril, R.mipmap.ic_launcher,
           R.mipmap.gril, R.mipmap.ic_launcher, R.mipmap.gril,};
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_grid_view_method);
       gridView = (GridView) findViewById(R.id.gv);

       //1. 准备数据源
       list = new ArrayList<Map<String, Object>>();
       for (int i = 0; i < images.length; i++) {
           Map<String, Object> map = new HashMap<String, Object>();
           map.put("image", images[i]);
           map.put("text", "图片" + i);
           list.add(map);

       }

//      2.为数据源设置适配器
       MyAdapter adapter = new MyAdapter();
//      3.将适配过后点数据显示在GridView 上
       gridView.setAdapter(adapter);
       // item点击事件处理
       gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
           @Override
           public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
               //

           }
       });
   }
   class MyAdapter extends BaseAdapter {

       @Override
       public int getCount() {
           return list.size();
       }

       @Override
       public Object getItem(int position) {
           return list.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) {
               //第一次加载创建View,其余复用 View
               convertView = LayoutInflater.from(GridViewMethod.this).inflate(R.layout.gridview_item_img_tv, null);
               holder = new ViewHolder();
               holder.imageView = (ImageView) convertView.findViewById(R.id.grid_img);
               holder.textView = (TextView) convertView.findViewById(R.id.grid_tv);
               // 打标签
               convertView.setTag(holder);

           } else {
               //从标签中获取数据
               holder = (ViewHolder) convertView.getTag();
           }

           //根据key值设置不同数据内容
           holder.imageView.setImageResource((Integer)list.get(position).get("image"));
           holder.textView.setText((String) list.get(position).get("text"));

           return convertView;
       }
   }

   class ViewHolder {
       ImageView imageView;
       TextView textView;

   }
}
  • GridView 布局如下
   <GridView
       android:id="@+id/gv"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:layout_gravity="center"
       android:gravity="center"
       android:horizontalSpacing="10dp"
       android:numColumns="3"
       android:verticalSpacing="10dp" />
  • 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/grid_img"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_margin="5dp"
       android:gravity="center_horizontal"
       android:src="@mipmap/ic_launcher" />

   <TextView
       android:id="@+id/grid_tv"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_margin="5dp"
       android:textColor="@android:color/darker_gray"
       android:text="test"
       android:gravity="center_horizontal"
       android:textSize="25sp" />
</LinearLayout>

至此GridView 的基本使用方法结束,如果不是太明白,可以查看上篇文章Listview的使用方法。


欢迎关注微信公众号:程序员Android


微信公众号:ProgramAndroid



我们不是牛逼的程序员,我们只是程序开发中的垫脚石。