GridView 的基本使用

208 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

写出来的效果如下:

这里写图片描述

  • 布局文件:

    <GridView
        android:id="@+id/gv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:numColumns="3"
        android:scrollbars="none" />
android:scrollbars="none" : 不显示滚动条
android:numColumns="3"    : 显示有三列
  • 写adapter类(代码如下):

public class GridViewAdapter extends BaseAdapter {

    private Context context;
    private List<Map<String, Object>> list;

    public GridViewAdapter(Context context, List<Map<String, Object>> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder viewHolder;
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.item_gridview, null, false);
            viewHolder = new ViewHolder(convertView);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        try {
            /**
             * =========从list中取出数据并设置在控件中
             */
            Map<String, Object> map = list.get(position);
            String name = (String) map.get("name");
            int img = (int) map.get("img");

            viewHolder.gvItemImg.setImageResource(img);
            viewHolder.gvItemTv.setText(name);

        } catch (Exception e) {
            Toast.makeText(context, e.getMessage(), Toast.LENGTH_SHORT).show();
        }
        return convertView;
    }


    @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;
    }


    static class ViewHolder {
        @BindView(R.id.gv_item_img)
        ImageView gvItemImg;
        @BindView(R.id.gv_item_tv)
        TextView gvItemTv;

        ViewHolder(View view) {
            ButterKnife.bind(this, view);
        }
    }
}
  • 在Activity中的代码如下:
public class MainActivity extends AppCompatActivity {

    @BindView(R.id.gv)
    GridView gv;

    private List<Map<String, Object>> list;
    private GridViewAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        //拿到数据
        getAndCombinData();

        adapter = new GridViewAdapter(this, list);
        gv.setAdapter(adapter);

    }

    @OnItemClick(R.id.gv)
    public void onItemClick(int poaition) {
        Toast.makeText(this, names[poaition], Toast.LENGTH_SHORT).show();
    }


    /**
     * ============拿到并组合数据组合数据
     */
    private void getAndCombinData() {

        list = new ArrayList<>();
        Map<String, Object> map = null;
        for (int i = 0; i < names.length; i++) {

            map = new HashMap<>();

            map.put("name", names[i]);
            map.put("img", imgs[i]);

            list.add(map);

        }
    }


    private int[] imgs = new int[]{
            R.drawable.home,
            R.drawable.work,
            R.drawable.data,
            R.drawable.msg,
            R.drawable.ddgl,
            R.drawable.me,
            R.drawable.sjtj,
            R.drawable.xxcx,
            R.drawable.qx,
            R.drawable.qxgl,
            R.drawable.home,
            R.drawable.work,
            R.drawable.data,
            R.drawable.msg,
            R.drawable.ddgl,
            R.drawable.me,
            R.drawable.sjtj,
            R.drawable.xxcx,
            R.drawable.qx,
            R.drawable.qxgl

    };

    private String[] names = new String[]{
            "主页", "任务", "数据", "消息", "设置", "我的", "数据统计", "信息管理", "权限", "权限管理",
            "主页", "任务", "数据", "消息", "设置", "我的", "数据统计", "信息管理", "权限", "权限管理"
    };


}