ListView + GridView讲解

一、ListView

  一个ListView通常有两个职责。

    (1)将数据填充到布局。

    (2)处理用户的选择点击等操作。

  一个ListView的创建需要3个元素。

    (1)ListView中的每一行View的布局。(里面可以包括图片,按钮,文字等等自定义的想要展示的内容。)

    (2)填入View的数据或者图片等。(每一行要展示的数据,比如TextView中的文字,ImageView中的图片)

    (3)连接数据与ListView的适配器Adapter。(告诉代码数据应该怎样展示,哪个View放哪些数据)

  

  (1)首先讲一下每一行的布局文件,一般以item_list_xxxx.xml命名,放置于layout文件夹中。下面举个简单的例子

    

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!-- 横向个人信息展示(头像+姓名)-->
 3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4     android:layout_width="match_parent"
 5     android:layout_height="wrap_content"
 6     android:orientation="horizontal">
 7
 8     <ImageView
 9         android:id="@+id/portrait"
10         android:layout_width="50dp"
11         android:layout_height="50dp"
12         android:src="@drawable/self" />
13
14     <TextView
15         android:id="@+id/name"
16         android:layout_width="match_parent"
17         android:layout_height="wrap_content"
18         android:layout_gravity="center_vertical"
19         android:layout_marginLeft="10dp"
20         android:text="名字"
21         android:textColor="@color/black"
22         android:textSize="@dimen/smid" />
23
24 </LinearLayout>

  代码的效果如图,这就是ListView中一行的样式。

  (2)对于上个布局的例子,每一行需要的数据有两个,一个是图片头像,一个是文字姓名,所以我们用两个动态数组来保存这些数据

ArrayList<MemberStudentBean> studentNameList = new ArrayList<MemberStudentBean>();
ArrayList<Portrait> studentPortraitSignList = new ArrayList<Portrait>();

  其中,MemberStudentBean是一个保存用户信息的实体类,其中包含多个字段来保存用户的信息,其中有我们要展示在id=name这个TextView中的名字字段。Portrait是一个保存头像的类,其中有许多功能,在这里我们只需要知道其中的一个方法:

public void setPortraitInImageView(ImageView imageView);//将头像展示于imageView中

  (3)最后就是最重要的Adapter了。

    表4-5 常用适配器


Adapter


含义


ArrayAdapter<T>


用来绑定一个数组,支持泛型操作


SimpleAdapter


用来绑定在xml中定义的控件对应的数据


SimpleCursorAdapter


用来绑定游标得到的数据


BaseAdapter


通用的基础适配器

    一般我们都是写一个类继承BaseAdapter来实现我们想要的数据连接。

    

 1 public class ImageTextAdapter extends BaseAdapter {
 2
 3     private List<MemberStudentBean> nameList;
 4     private List<Portrait> portraitList;
 5     private Context context;
 6
 7     public ImageTextAdapter(Context context,List<MemberStudentBean> nameList,List<Portrait> portraitList){
 8         this.nameList = nameList;
 9         this.portraitList = portraitList;
10         this.context = context;
11     }
12
13     @Override
14     public int getCount() {
15         return nameList.size();
16     }
17
18     @Override
19     public Object getItem(int position) {
20         return nameList.get(position);
21     }
22
23     @Override
24     public long getItemId(int position) {
25         return position;
26     }
27
28     @Override
29     public View getView(int position, View convertView, ViewGroup parent) {
30         MyView tag;
31         if (convertView == null){
32             View v = LayoutInflater.from(context).inflate(R.layout.item_user_portrait_name,null);
33             tag = new MyView();
34             tag.imageView = (CircleImageView) v.findViewById(R.id.icon);
35             tag.textView = (TextView) v.findViewById(R.id.name);
36             v.setTag(tag);
37             convertView = v;
38         }else
39             tag = (MyView) convertView.getTag();
40         tag.textView.setText(nameList.get(position).getStudentName());
41         tag.imageView.setImageResource(R.drawable.self);
42         portraitList.get(position).setPortraitInImageView(tag.imageView);
43         tag.imageView.setBorderWidth(1);
44         tag.imageView.setBorderColor(context.getResources().getColor(R.color.borderColor));
45         return convertView;
46     }
47     private class MyView{
48         CircleImageView imageView;
49         TextView textView;
50     }
51 }

    讲几个要点,一个是要自己写一个Tag类来保存每一行的view中的控件的引用。其次是重写getView方法,每次

  

时间: 2024-08-06 16:12:09

ListView + GridView讲解的相关文章

Android高手进阶教程(十六)之---Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!

大家好!今天给大家讲解一下BaseAdapter(基础适配器)的用法,适配器的作用主要是用来给诸如(Spinner,ListView,GridView)来填充数据的.而(Spinner,ListView,GridView)都有自己的适配器(记起来麻烦).但是BaseAdapter(一招鲜)对他们来说却是通用的,为什么这么说呢,首先我们看一下API文档: 我们看一下BaseAdapter已经实现了ListAdapter和SpinnerAdapter的接口,而GridView的适配器是实现了List

universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法

在listview/gridview中使用UIL来display每个item的图片,当图片数量较多需要滑动滚动时会出现卡顿,而且加载过的图片再次上翻后依然会重复加载(显示设置好的加载中图片) 最近在使用UIL遇到了这个问题,相信这个问题许多使用UIL的人都碰到过 现在把解决方法贴出来给有同样问题的朋友做参考 先看下UIL的工作流程 在已经允许内存,存储卡缓存的前提下,当一个图片被请求display时,首先要判断图片是否缓存在内存中,如果false则尝试从存储卡读取,如果依然不存在最后才从网络地址

ScrollView listView gridView 之间的冲突问题

在ScrollView中的listView gridView添加适配器之后添加//设置gridView整体的高度 public void setListViewHeightBasedOnChildren(GridView gridView) { // 获取ListView对应的Adapter if(adapter== null) { return; } int totalHeight = 0; for(int i = 0, len = adapter.getCount(); i < len; i

Android 快速开发系列 打造万能的ListView GridView 适配器

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写得最多的就是ListView,GridView的适配器吧,记得以前开发一同事开发项目,一个项目下来基本就一直在写ListView的Adapter都快吐了~~~对于Adapter一般都继承BaseAdapter复写几个方法,getView里面使用ViewHolder模式,其实大部分的代码基本都是类似的

Android PullToRefresh (ListView GridView 下拉刷新) 使用详解

Android PullToRefresh (ListView GridView 下拉刷新) 使用详解 标签: Android下拉刷新pullToRefreshListViewGridView 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38238749,本文出自:[张鸿洋的博客] 群里一哥们今天聊天偶然提到这个git hub上的控件:pull-to-r

ScrollView嵌套ListVIew/GridView显示问题

ScrollView嵌套ListView/GridView的显示问题可以说是安卓开发者都会遇到的问题,同时处理起来也比较麻烦,最近也遇到了这种问题,在这整理一下做个记录. 1.对于ListView最常用的就是动态的根据Adapter来计算列表的高度,在设置完列表之后调用一下对应的计算方法即可: /** * 动态设置ListView的高度 * * @param listView */ public static void setListViewHeightBasedOnChildren(ListV

【转】ListView,GridView之LayoutAnimation特殊动画的实现 ps:需要学习的是在getView中添加动画的思想

LayoutAnimation干嘛用的?不知道的话网上搜一下. Android的Animation之LayoutAnimation使用方法有两种用法,我的通常写在代码中,像下面这样: 1 /** 2 * Layout动画 3 * 4 * @return 5 */ 6 protected LayoutAnimationController getAnimationController() { 7 int duration=300; 8 AnimationSet set = new Animatio

背水一战 Windows 10 (58) - 控件(集合类): ListViewBase - ListView, GridView

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(集合类 - ListViewBase) ListView GridView 示例1.ListView 的示例Controls/CollectionControl/ListViewBaseDemo/ListViewDemo.xaml <Page x:Class="Windows10.Controls.CollectionControl.ListViewDemo" xmlns="http://

【万里征程——Windows App开发】ListView&amp;GridView【修补中】

就我而言,List之类都是超难的,这一节我们就来逐个击破啦! ListView采用垂直堆叠得方式显示数据,而GridView则采用水平堆叠得方式. 长相的话嘛,它们都差不多啦. <Grid Name="grid1" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <ListView x:Name="listView1" SelectionChan