博客
关于我
ListView
阅读量:666 次
发布时间:2019-03-16

本文共 4445 字,大约阅读时间需要 14 分钟。

ListView与Adapter入门——从基础到实践

ListView是Android开发中几乎不可或缺的组件,它的功能远比 一般的ListView瓶颈要强大。作为开发者,了解ListView的工作原理以及如何通过Adapter高效地进行数据展示,是掌握Android开发的关键。

1. ListView的基础理解

ListView是一款由Android/Framework提供的标准列表组件,主要用于显示数据列表。它在手机应用程序中广泛应用,是用户与应用程序交互的重要介质。一个典型的ListView界面,能够展示一系列项,每一项都承载着数据的展示和用户操作的触发点。

2. ListView的显示所需的三大核心要素

要实现一个高效且功能完善的ListView,软件开发中需要具备以下三大核心要素:

  • ListView:作为列表展示的核心控件,负责管理列表的滚动、点击等操作。

  • Adapter:将数据内容映射到 ListView上的单个项(item),是一桥梁作用,负责数据与UI的绑定。

  • 数据源:字面意义上的数据,例如字符串、图片资源(Bitmap)、自定义对象等等。

  • 3. Adapter的功能与作用

    Adapter是一种抽象(Abstract)数据绑定工具,在Android开发中主要用于将各种数据源与控件进行绑定。本质上Adapter的功能是将复杂的数据转换成维度一致、可以在ListView上呈现的形式。

    • 常见的Adapter类
      • ArrayAdapter:适用于单一类型的数组数据,简单且强大,在大多数开发场景下都能满足需求。
      • SimpleAdapter:提供比ArrayAdapter更高级别的数据绑定,适用于需要自定义UI样式展示的数据。
      • CursorAdapter:专门处理数据库查询结果,适合与 SQLiteDatabase进行数据交互的场景。
      • BaseAdapter:高层次的Adapter类,提供更大的灵活性和定制化选择。

    在具体开发中选择适合的Adapter类是关键。例如,SimpleAdapter提供的delete方法允许开发者对数据项进行删除操作,这对于对列表项进行增删改查的场景尤为实用。

    4. ArrayAdapter的使用案例

    下面以一个简单的示例来展示 ArrayAdapter 的使用过程:

    第一步:在XML布局中定义ListView

    在主界面XML文件中添加如下代码:

    第二步:在MainActivity中初始化Adapter和ListView

    public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ListView listView = findViewById(R.id.listview4);        String[] fruits = new String[]{"苹果", "香蕉", "菠萝", "荔枝", "橘子"};        ArrayAdapter
    adapter = new ArrayAdapter<>(this, R.layout.simple_list_item_1, fruits); listView.setAdapter(adapter); }}

    运行结果:

    在手机上可以看到一个包含以下五个项目的列表:

  • 苹果
  • 香蕉
  • 菠萝
  • 荔枝
  • 橘子
  • 上述示例充分展示了ArrayAdapter的特点:

    • 简单易用:只需实现ArrayAdapter接口即可完成数据绑定。
    • 高效性能: ListView通过优化控件内部机制,保证了数据绑定的流畅度。
    • 良好的可扩展性:可以通过自定义布局文件,每个列表项都有独特的UI风格。

    5. SimpleAdapter的背背包

    SimpleAdapter相比于ArrayAdapter,更适合对列表项(item)的个性化定制。在实际开发中,可以定义一个适应每一项的布局文件:

    布局文件定义(Item.xml):

    使用SimpleAdapter的实现步骤:

  • 创建一个数据源,例如列表中的每一项都构成一个包含 key 和 value 的结构体(可以是 HashMap)。

  • 在代码中注入SimpleAdapter,并指明:

    • 上下文(Context)
    • 数据源(data)
    • 自定义的布局文件(item_layout)
    • Bolt的关键字对应的 view ID(例如name、title)
  • 将自定义Adapter注入 ListView。

  • 代码示例:

    public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ListView listView = findViewById(R.id.listview4);        List
    > data = new ArrayList<>(); Map
    item1 = new HashMap<>(); item1.put("name", "关羽"); item1.put("title", "义薄云天"); data.add(item1); // 其他类似的项... // 创建完成后,注入SimpleAdapter SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item4, new String[]{"name", "title"}, new int[]{R.id.name, R.id.title}); listView.setAdapter(adapter); }}

    6. BaseAdapter的高级功能

    BaseAdapter提供了一个通用的Adapter框架,可以根据需求进行扩展。在Android开发中,经常需要自定义Adapter,例如:

    • 增加新的数据源类型支持(如数据库查询结果)
    • 实现自定义的数据处理逻辑
    • 扩展列表项的多样化展示方式

    BaseAdapter实现思路:

  • 实现BaseAdapter 的必要方法:

    • public int getCount():返回数据项总数。通过集合大小直接返回即可。
    • public Object getItem(int index):返回对应索引位置的数据项。
    • public long getItemId(int index):返回数据项的唯一标识符。
  • override getView(int index, View convertView, ViewGroup parent):创建或获取一个View对象,填充数据到相应的控件中。

  • 可根据需要实现其他方法(如删除一个数据项)。

  • 具体实现:

    以下 Java 代码展示了一个通用的 BaseAdapter 实现:

    public class MyBaseAdapter extends BaseAdapter {    private List
    mDataList; private Context mContext; private int layoutResource; // 自定义的布局文件路径 public BaseServiceAdapter(Context context, List
    list, int layoutResource) { super(context, list); mContext = context; mDataList = list; this.layoutResource = layoutResource; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { view = View.inflate(mContext, layoutResource, null); } DataItem item = mDataList != null ? mDataList.get(position) : null; TextView nameView = view.findViewById(R.id.textViewName); TextView descView = view.findViewById(R.id.textViewDesc); if (item != null) { nameView.setText(item.getName()); descView.setText(item.getDesc()); } return view; } // 根据需要实现其他BaseAdapter方法}

    结论

    通过以上内容可以初步掌握 ListView 与 Adapter 在Android开发中的基本使用方法。理解这些概念和案例是逐步掌握Android 开发的关键一步。在接下来的学习过程中,可以通过更多复杂的实例来加深对 ListView 与 Adapter 组件的理解。

    转载地址:http://uuxqz.baihongyu.com/

    你可能感兴趣的文章
    Mac上如何强制关闭应用
    查看>>
    关于Linux系统中touch命令的说明
    查看>>
    剑指Offer03-数组中重复的数字
    查看>>
    将windows里的内容直接复制粘贴到ubuntu,提高效率
    查看>>
    将tomcat设置成window自启动服务
    查看>>
    webservice 远程服务器返回错误:(400)错误的请求
    查看>>
    [日常] PHP与Mysql测试kill慢查询并检验PDO的错误模式
    查看>>
    [PHP] try catch在日常中的使用
    查看>>
    [Linux] 进程间通信
    查看>>
    [PHP] error_reporting(0)可以屏蔽Fatal error错误
    查看>>
    [操作系统]内存连续分配管理方式
    查看>>
    C++ Primer Plus【复习笔记】-【复合类型】
    查看>>
    thinkphp 的一些重要知识点
    查看>>
    Python基础案例教程
    查看>>
    Java学习第二章——Java基本语句
    查看>>
    形状类似小于等于号的符号是啥
    查看>>
    C#中combox下拉框禁止键盘输入
    查看>>
    遇到问题之-yum update无法连接镜像问题解决
    查看>>
    遇到问题之-httpd服务启动报错182行错误
    查看>>
    pycharm如何设置(错误、警告类的标准提醒)
    查看>>