热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用ArrayAdapter来定制ListView

一个ListView,其宽高都设为match_parent,可以更省资源。activity_main.xml<ListViewandroid:id@+id

一个 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 类。

 1 public class HeroAdapter extends ArrayAdapter {
 2 
 3     private int resourceId;
 4     public HeroAdapter(Context context, int resource, List 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

public class MainActivity extends AppCompatActivity {

    private ArrayList 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 子项不足无法滚动的尴尬场面

 

 

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

推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 添加layout_weight后,ListView仍未对齐 - ListView is not aligned even after added layout_weight
    Hereistheoutputofmycode.IcannotgetallviewsalignedineachListViewitem.Ialreadyused ... [详细]
  • 这个是listview的item布局,当在list中滚动时,每个item的高度会随机变化,导致显示混乱,多滚动几次高度又显示正常了,怎么回事呢?<?xmlversion1.0 ... [详细]
  • 一;点击事件。1;打开关闭蓝牙;2;扫描附近蓝牙的点击事件。二;关于蓝牙设备listView展示1;listView适配器2;通过layout找到实例化ListView对 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 【Android开发】 ListView使用实战详解,你get到了嘛?
    【Android开发】ListView使用实战详解,你get到了嘛?-目录一、什么是ListView?二、ListView的简单用法三、ListView点击响应事件hel ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
author-avatar
雨里漾_968
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有