GridView 使用详解
GridView 跟ListView 很类似,Listview 主要以列表形式显示数据,GridView 则是以网格形式显示数据,掌握ListView 使用方法后,会很轻松的掌握GridView的使用方法。本篇文章主要知识点如下
GridView 主要使用方法
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中。主要使用方法如下:
准备数据源
为数据源设置适配器
将适配过后点数据显示在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
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
点击阅读原文,获取更多福利
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!