一个 ListView,其宽高都设为 match_parent,可以更省资源。

activity_main.xml

  1. <ListView
  2. android:id="@+id/list_View"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent" />

新建一个 xml 文件,设计 ListView 的每一个子项。

hero_item.xml

  1. <ImageView
  2. android:id="@+id/hero_view"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. app:srcCompat="@mipmap/ic_launcher" />
  6.  
  7. <TextView
  8. android:id="@+id/hero_text"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:layout_gravity="center_vertical"
  12. android:text="TextView" />

然后再设计编写实体类,用于 ListView 适配器的适配类型,Hero 类只有两个字段,为别为 Hero 的名字和图片资源 ID,对应 ListView 的子项。

Hero.java

  1. public class Hero {
  2. private String name;
  3. private int imageId;
  4.  
  5. public Hero(String name, int imageId) {
  6. this.name = name;
  7. this.imageId = imageId;
  8. }
  9.  
  10. public void setName(String name) {
  11. this.name = name;
  12. }
  13. public void setImageId(int imageId) {
  14. this.imageId = imageId;
  15. }
  16. public String getName() {
  17. return name;
  18. }
  19. public int getImageId() {
  20. return imageId;
  21. }
  22. }

接着创建一个自定义的适配器,继承 ArrayAdapter,并将泛型指定为 Hero 类。

  1. public class HeroAdapter extends ArrayAdapter<Hero> {
  2.  
  3. private int resourceId;
  4. public HeroAdapter(Context context, int resource, List<Hero> objects) {
  5. super(context, resource, objects);
  6. resourceId=resource;
  7. }
  8.  
  9. public View getView(int position, View convertView, ViewGroup parent) {
  10. Hero hero=getItem(position); //获得当前项的Hero数据
  11. View view;
  12. ViewHolder viewHolder;   //使用ViewHolder优化 ListView
  13. if (convertView==null){   //使用convertView重复使用查找加载好的布局
  14. view= LayoutInflater.from(getContext()).inflate(resourceId,parent,false);  //使用布局填充器为子项加载我们传入的子布局「hero_item」
  15. viewHolder=new ViewHolder();
  16. viewHolder.heroImage= (ImageView) view.findViewById(R.id.hero_view);  //查找
  17. viewHolder.heroText= (TextView) view.findViewById(R.id.hero_text);
  18. view.setTag(viewHolder);  //把ViewHolder储存在View里面
  19.  
  20. }else {
  21. view=convertView;
  22. viewHolder= (ViewHolder) view.getTag();
  23. }
  24. viewHolder.heroImage.setImageResource(hero.getImageId()); //设置数据
  25. viewHolder.heroText.setText(hero.getName());
  26. return view;
  27. }
  28. class ViewHolder{
  29. ImageView heroImage;
  30. TextView heroText;
  31. }
  32. }

其中重写了构造方法,把 Context、子项布局文件和数据传了进来,并重写了 getView 方法,这个方法会在每个子项滚动进屏幕时调用。

.inflate 的第三个参数设置为 false,是为让我们在父布局中声明的 layout 属性生效,但不为这个项添加父布局,因为 View 一但有了父布局后,它便不能再添加到 ListView 中去

最后在MainActivity中查找组件,添加Hero数据,设置布局和Adapter

  1. public class MainActivity extends AppCompatActivity {
  2.  
  3. private ArrayList<Hero> herolist=new ArrayList();
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. initHero();
  9. HeroAdapter heroAdapter=new HeroAdapter(this,R.layout.hero_item,herolist);
  10. ListView listView= (ListView) findViewById(R.id.list_View);
  11. listView.setAdapter(heroAdapter);
  12. }
  13. public void initHero(){
  14. for (int i=0;i<2;i++){
  15. Hero lin=new Hero("lin",R.drawable.b2);
  16. herolist.add(lin);
  17. Hero delia=new Hero("delia",R.drawable.b3);
  18. herolist.add(delia);
  19. Hero fire=new Hero("fire",R.drawable.b4);
  20. herolist.add(fire);
  21. Hero saber=new Hero("saber",R.drawable.b6);
  22. herolist.add(saber);
  23. Hero christina=new Hero("christina",R.drawable.b7);
  24. herolist.add(christina);
  25. Hero dva=new Hero("dva",R.drawable.b9);
  26. herolist.add(dva);
  27. }
  28. }
  29. }
  30.  

其中添加了 initHero() 方法,解决英雄不够,ListView 子项不足无法滚动的尴尬场面

  1. 博客园的编辑器一点都不好用

使用 ArrayAdapter 来定制 ListView的更多相关文章

  1. android:定制 ListView 的界面

    只能显示一段文本的 ListView 实在是太单调了,我们现在就来对 ListView 的界面进行 定制,让它可以显示更加丰富的内容. 首先需要准备好一组图片,分别对应上面提供的每一种水果,待会我们要 ...

  2. 初识ListView - 定制ListView - 提升ListView运行效率

    ListView绝对可以称得上是 Android 中最常用的控件之一,几乎所有的应用程序都会用到它.由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的 ...

  3. Android—— ListView 的简单用法及定制ListView界面

    一.ListView的简单用法 2. 训练目标 1) 掌握 ListView 控件的使用 2) 掌握 Adapter 桥梁的作用 实现步骤: 1)首先新建一个项目, 并让ADT 自动帮我们创建好活动. ...

  4. Android常见UI组件之ListView(二)——定制ListView

    Android常见UI组件之ListView(二)--定制ListView 这一篇接上篇.展示ListView中选择多个项及实现筛选功能~ 1.在位于res/values目录下的strings.xml ...

  5. android#定制ListView的界面

    内容摘自<第一行代码>——郭霖 只能显示一段文本的ListView实在是太单调了,我们现在就来对ListView的界面进行定制,让它可以显示更加丰富的内容.首先需要准备好一组图片,分别对应 ...

  6. 自己定制ListView,上拉刷新和下拉刷新,加载网络图片,并且添加缓存机制。

    package com.lixu.listviewrefresh; import java.util.ArrayList; import java.util.HashMap; import java. ...

  7. 定制ListView的界面(让列表中不仅有文字还有图片fruitImage.setImageResource(fruit.getImageId());)

    1.定义自己的实体类来作为ListView的适配类型如: public class Fruit { private String name;//水果的名字 private int imageId;// ...

  8. ListView与ArrayAdapter的搭配使用

    在android中,ListView是一种很重要的控件,一般的使用中,常建立一个所需类型的ArrayList,再通过ArrayAdapter把ListView绑定到ArrayList上,通过Array ...

  9. ListView之ArrayAdapter

    ArrayAdapter 普通的显示listView子项,安卓的内置对象 使用方法: /* ListView :列表 通常有两个职责: a.将数据填充到布局 b.处理点击事件 一个ListView创建 ...

随机推荐

  1. JavaScript语句-流程控制语句

    JavaScript定义了一组语句,语句通常用于执行一定的任务.语句可以很简单,也可以很复杂. 选择结构,可以在程序中创建交叉结构来指定程序流的可能方向.JavaScript中有四种选择结构: 1.单 ...

  2. [办公应用]从美国带回来的兄弟牌brother打印机如何处理

    周末帮朋友去调一台国外带回来的brother一体机,型号MFC-J630W.这是她单位老板从国外带回来的,说是便宜:不过她说只有英文说明书,她不太会操作.我想这还不容易么,就满口答应下来了.我先到br ...

  3. myeclipse包的层数和package的层数不一致

    复制别人的工程的时候常常遇到包的层数不一致的情况 如下图 其实com.weibo.happpy.dao的上面还有一层java包,但是代码里没有写java....... 可以通过如下方式修改工程:

  4. IntentFilter打印方法

    转载请注明出处:http://blog.csdn.net/droyon 在我们进行Android应用程序开发时.我们有时须要对某个对象进行打印输出.以方便我们进行调试. 非常多对象实现了toStrin ...

  5. 构造json参数时key的引号和js string转json的三种方式

    {name:"dd",age:"16"} {"name":"dd","age":"16&q ...

  6. CRM 配置 ADFS后,使用自定义STS遇到的问题总结

    1 登录ADFS服务查看 ADFS日志 2 根据日志提示的错误,设置ADFS对应的属性 (Get-ADFSRelyingPartyTrust) | Set-ADFSRelyingPartyTrust  ...

  7. 织梦dedecms将指定图片自动生成指定尺寸的小图、缩略图、图片的方法

    对于普通企业网站来讲,织梦原来的程序只是提供了一个缩略图,但是这样对于一些相对来说图片会比较多的网站来说,图片太大当缩略图会导致网站整体的访问速度,所以我今天就来教你织梦把一张大图转换成生成一张小图或 ...

  8. js页面报错javax.servlet.jsp.PageContext cannot be resolved to a type解决

    构建了一个maven项目但是项目创建好的jsp总会报错javax.servlet.jsp.PageContext cannot be resolved to a type,但是不影响项目运行.但总归难 ...

  9. CodeForces-652D:Nested Segments(树状数组+离散化)

    You are given n segments on a line. There are no ends of some segments that coincide. For each segme ...

  10. ML.NET

    ML.NET http://www.cnblogs.com/BeanHsiang/category/1218714.html 随笔分类 - 使用ML.NET实现NBA得分预测 摘要: 本文将介绍一种特 ...