使用 ArrayAdapter 来定制 ListView
一个 ListView,其宽高都设为 match_parent,可以更省资源。
activity_main.xml
- <ListView
- android:id="@+id/list_View"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
新建一个 xml 文件,设计 ListView 的每一个子项。
hero_item.xml
- <ImageView
- android:id="@+id/hero_view"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- app:srcCompat="@mipmap/ic_launcher" />
- <TextView
- android:id="@+id/hero_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:text="TextView" />
然后再设计编写实体类,用于 ListView 适配器的适配类型,Hero 类只有两个字段,为别为 Hero 的名字和图片资源 ID,对应 ListView 的子项。
Hero.java
- public class Hero {
- private String name;
- private int imageId;
- public Hero(String name, int imageId) {
- this.name = name;
- this.imageId = imageId;
- }
- public void setName(String name) {
- this.name = name;
- }
- public void setImageId(int imageId) {
- this.imageId = imageId;
- }
- public String getName() {
- return name;
- }
- public int getImageId() {
- return imageId;
- }
- }
接着创建一个自定义的适配器,继承 ArrayAdapter,并将泛型指定为 Hero 类。
- public class HeroAdapter extends ArrayAdapter<Hero> {
- private int resourceId;
- public HeroAdapter(Context context, int resource, List<Hero> objects) {
- super(context, resource, objects);
- resourceId=resource;
- }
- public View getView(int position, View convertView, ViewGroup parent) {
- Hero hero=getItem(position); //获得当前项的Hero数据
- View view;
- ViewHolder viewHolder; //使用ViewHolder优化 ListView
- if (convertView==null){ //使用convertView重复使用查找加载好的布局
- view= LayoutInflater.from(getContext()).inflate(resourceId,parent,false); //使用布局填充器为子项加载我们传入的子布局「hero_item」
- viewHolder=new ViewHolder();
- viewHolder.heroImage= (ImageView) view.findViewById(R.id.hero_view); //查找
- viewHolder.heroText= (TextView) view.findViewById(R.id.hero_text);
- view.setTag(viewHolder); //把ViewHolder储存在View里面
- }else {
- view=convertView;
- viewHolder= (ViewHolder) view.getTag();
- }
- viewHolder.heroImage.setImageResource(hero.getImageId()); //设置数据
- viewHolder.heroText.setText(hero.getName());
- return view;
- }
- class ViewHolder{
- ImageView heroImage;
- TextView heroText;
- }
- }
其中重写了构造方法,把 Context、子项布局文件和数据传了进来,并重写了 getView 方法,这个方法会在每个子项滚动进屏幕时调用。
.inflate 的第三个参数设置为 false,是为让我们在父布局中声明的 layout 属性生效,但不为这个项添加父布局,因为 View 一但有了父布局后,它便不能再添加到 ListView 中去
最后在MainActivity中查找组件,添加Hero数据,设置布局和Adapter
- public class MainActivity extends AppCompatActivity {
- private ArrayList<Hero> herolist=new ArrayList();
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initHero();
- HeroAdapter heroAdapter=new HeroAdapter(this,R.layout.hero_item,herolist);
- ListView listView= (ListView) findViewById(R.id.list_View);
- listView.setAdapter(heroAdapter);
- }
- public void initHero(){
- for (int i=0;i<2;i++){
- Hero lin=new Hero("lin",R.drawable.b2);
- herolist.add(lin);
- Hero delia=new Hero("delia",R.drawable.b3);
- herolist.add(delia);
- Hero fire=new Hero("fire",R.drawable.b4);
- herolist.add(fire);
- Hero saber=new Hero("saber",R.drawable.b6);
- herolist.add(saber);
- Hero christina=new Hero("christina",R.drawable.b7);
- herolist.add(christina);
- Hero dva=new Hero("dva",R.drawable.b9);
- herolist.add(dva);
- }
- }
- }
其中添加了 initHero() 方法,解决英雄不够,ListView 子项不足无法滚动的尴尬场面
- 博客园的编辑器一点都不好用
使用 ArrayAdapter 来定制 ListView的更多相关文章
- android:定制 ListView 的界面
只能显示一段文本的 ListView 实在是太单调了,我们现在就来对 ListView 的界面进行 定制,让它可以显示更加丰富的内容. 首先需要准备好一组图片,分别对应上面提供的每一种水果,待会我们要 ...
- 初识ListView - 定制ListView - 提升ListView运行效率
ListView绝对可以称得上是 Android 中最常用的控件之一,几乎所有的应用程序都会用到它.由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的 ...
- Android—— ListView 的简单用法及定制ListView界面
一.ListView的简单用法 2. 训练目标 1) 掌握 ListView 控件的使用 2) 掌握 Adapter 桥梁的作用 实现步骤: 1)首先新建一个项目, 并让ADT 自动帮我们创建好活动. ...
- Android常见UI组件之ListView(二)——定制ListView
Android常见UI组件之ListView(二)--定制ListView 这一篇接上篇.展示ListView中选择多个项及实现筛选功能~ 1.在位于res/values目录下的strings.xml ...
- android#定制ListView的界面
内容摘自<第一行代码>——郭霖 只能显示一段文本的ListView实在是太单调了,我们现在就来对ListView的界面进行定制,让它可以显示更加丰富的内容.首先需要准备好一组图片,分别对应 ...
- 自己定制ListView,上拉刷新和下拉刷新,加载网络图片,并且添加缓存机制。
package com.lixu.listviewrefresh; import java.util.ArrayList; import java.util.HashMap; import java. ...
- 定制ListView的界面(让列表中不仅有文字还有图片fruitImage.setImageResource(fruit.getImageId());)
1.定义自己的实体类来作为ListView的适配类型如: public class Fruit { private String name;//水果的名字 private int imageId;// ...
- ListView与ArrayAdapter的搭配使用
在android中,ListView是一种很重要的控件,一般的使用中,常建立一个所需类型的ArrayList,再通过ArrayAdapter把ListView绑定到ArrayList上,通过Array ...
- ListView之ArrayAdapter
ArrayAdapter 普通的显示listView子项,安卓的内置对象 使用方法: /* ListView :列表 通常有两个职责: a.将数据填充到布局 b.处理点击事件 一个ListView创建 ...
随机推荐
- JavaScript语句-流程控制语句
JavaScript定义了一组语句,语句通常用于执行一定的任务.语句可以很简单,也可以很复杂. 选择结构,可以在程序中创建交叉结构来指定程序流的可能方向.JavaScript中有四种选择结构: 1.单 ...
- [办公应用]从美国带回来的兄弟牌brother打印机如何处理
周末帮朋友去调一台国外带回来的brother一体机,型号MFC-J630W.这是她单位老板从国外带回来的,说是便宜:不过她说只有英文说明书,她不太会操作.我想这还不容易么,就满口答应下来了.我先到br ...
- myeclipse包的层数和package的层数不一致
复制别人的工程的时候常常遇到包的层数不一致的情况 如下图 其实com.weibo.happpy.dao的上面还有一层java包,但是代码里没有写java....... 可以通过如下方式修改工程:
- IntentFilter打印方法
转载请注明出处:http://blog.csdn.net/droyon 在我们进行Android应用程序开发时.我们有时须要对某个对象进行打印输出.以方便我们进行调试. 非常多对象实现了toStrin ...
- 构造json参数时key的引号和js string转json的三种方式
{name:"dd",age:"16"} {"name":"dd","age":"16&q ...
- CRM 配置 ADFS后,使用自定义STS遇到的问题总结
1 登录ADFS服务查看 ADFS日志 2 根据日志提示的错误,设置ADFS对应的属性 (Get-ADFSRelyingPartyTrust) | Set-ADFSRelyingPartyTrust ...
- 织梦dedecms将指定图片自动生成指定尺寸的小图、缩略图、图片的方法
对于普通企业网站来讲,织梦原来的程序只是提供了一个缩略图,但是这样对于一些相对来说图片会比较多的网站来说,图片太大当缩略图会导致网站整体的访问速度,所以我今天就来教你织梦把一张大图转换成生成一张小图或 ...
- js页面报错javax.servlet.jsp.PageContext cannot be resolved to a type解决
构建了一个maven项目但是项目创建好的jsp总会报错javax.servlet.jsp.PageContext cannot be resolved to a type,但是不影响项目运行.但总归难 ...
- CodeForces-652D:Nested Segments(树状数组+离散化)
You are given n segments on a line. There are no ends of some segments that coincide. For each segme ...
- ML.NET
ML.NET http://www.cnblogs.com/BeanHsiang/category/1218714.html 随笔分类 - 使用ML.NET实现NBA得分预测 摘要: 本文将介绍一种特 ...