Android ListView 的简单用法

Android ListView 的简单用法参考API和《第一行代码》-ListViewisaviewgroupthatdisplaysalistofscrollableitems.ThelistitemsareautomaticallyinsertedtothelistusinganAdapterthatpullscontentfromasourcesuchasan…

大家好,又见面了,我是你们的朋友全栈君。

参考 API 和《第一行代码》

  1. ListView is a view group that displays a list of scrollable items. The list items are automatically inserted to the list using an Adapter that pulls content from a source such as an array or database query and converts each item result into a view that’s placed into the list.
  2. When the content for your layout is dynamic or not pre-determined, you can use a layout that subclasses AdapterView to populate the layout with views at runtime. A subclass of the AdapterView class uses an Adapter to bind data to its layout. The Adapter behaves as a middleman between the data source and the AdapterView layout—the Adapter retrieves the data (from a source such as an array or a database query) and converts each entry into a view that can be added into the AdapterView layout.

ListView 用来显示一个可以垂直滚动的列表,其中列表的每一项由其相关联的适配器提供,适配器起到一个中间人的作用,即连接列表数据和ListView布局
-
使用默认 ListView, 先定义一个数组(ArrayList)保存要在ListView里显示的数据,然后新建一个适配器,构造函数传入系统默认的子项目布局( android.R.layout.simple_list_item_1 )–(显示一个 TextView )和数据存在的数组,再直接调用 ListView 的 setAdapter() 方法,传入新建好的适配器,即可显示数据.

使用自定义的 ListView, 可以在子项目中不只显示一个 TextView, 而是可以显示其他自己定义的布局,所以要

  1. 先新建一个子项目布局,里面可以添加 TextView, Button, ImageView 等控件;
  2. 后新建一个类 Item 与子项目布局里的控件对应,用作 List<\T> 的范型和要继承的 ArrayAdapter<\T> 的范型,也是要显示的数据类型;
  3. 自定义 Adapter 类扩展自 ArrayAdapter<\T>, 重写 getView() 方法,先 getItem(position) 获取当前 Item 实例,然后 LayoutInflater.from(getContext()).inflate(resourceId,parent,false) 获取子项目布局 View 实例,再通过 View.findViewById() 获取子项目布局里的控件实例,最后调用 setText() 等控件方法完成控件的操作,返回 View.
  4. 然后和使用默认 ListView 一样,新建一个自定义的适配器,传入自定义的子项目布局和要显示的数据,再直接调用 ListView 的 setAdapter() 方法,传入新建好的适配器,即可显示数据.
  5. 要增加新的数据,只需要调用 Adapter.add(Item) 即可.

例 :

public class Item { 
   
    private String text;
    private int button;
    
    public Item(String text,int button){ 
   
        this.text=text;
        this.button=button;
    }
    public String getText(){ 
   
        return text;
    }
    public int getButton(){ 
   
        return button;
    }
}
public class ItemAdapter extends ArrayAdapter<Item> { 
   
    private int resourceId;
    public ItemAdapter(Context context,int resource,List<Item> data){ 
   
        super(context,resource,data);
        resourceId=resource;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent){ 
   
        final Item item=getItem(position);
        View view;
        ViewHolder holder=new ViewHolder();  // viewHolder 是提升 ListView 运行效率
        if(convertView==null){ 
   
            view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
            holder.tv=view.findViewById(R.id.text_view);
            holder.bn=view.findViewById(R.id.button);
            view.setTag(holder);
        } else { 
   
            view = convertView;
            holder=(ViewHolder) view.getTag();
        }
        holder.tv.setText(item.getText());
        holder.bn.setOnClickListener(new View.OnClickListener() { 
   
            @Override
            public void onClick(View v) { 
   
                Toast.makeText(getContext(),"you clicked button"+item.getButton(),Toast.LENGTH_SHORT).show();
            }
        });
        return view;
    }
    class ViewHolder{ 
   
        TextView tv;
        Button bn;
    }
}
public class MainActivity extends AppCompatActivity { 
   

    private ArrayList<Item> data=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) { 
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();
        ItemAdapter adapter=new ItemAdapter(this,R.layout.list_view_item,data);
        ListView listView=(ListView) findViewById(R.id.list_view);
        listView.setAdapter(adapter);
    }

    private void initData(){ 
   
        for(int i=0;i<20;++i){ 
   
            Item a=new Item("list view test. no "+i,i);
            data.add(a);
        }
    }
}

运行效果 :

这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163277.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月22日 上午6:46
下一篇 2022年7月22日 上午6:46


相关推荐

  • Android应用开发入门教程(经典版)

    Android应用开发入门教程(经典版)第一篇 Android 系统结构和 SDK 使用第 1 章 Android 的系统介绍第 2 章 AndroidSDK 的开发环境第二篇 Android 应用程序的概述和框架第 3 章 Android 应用层程序的开发方式第 4 章 Android 应用程序示例第 5 章 Android 应用程序的内容第三篇 Android 的 UI 系统实现第 6 章 UI 的基本外形和控制第 7 章控件 Widget 的使用第 8 章视图组 ViewGroup 和布局 Layout 的使用第 9 章 2D 图形接口的使用第 10 章 OpenGL3D 图形的使用

    2025年10月22日
    4
  • 以《简单易懂》的语言带你搞懂有监督学习算法【附Python代码详解】机器学习系列之KNN篇[通俗易懂]

    以《简单易懂》的语言带你搞懂有监督学习算法【附Python代码详解】机器学习系列之KNN篇[通俗易懂]机器学习系列往期回顾❤️开始学习机器学习之前你必须要了解的知识有哪些?机器学习系列入门篇在上篇文章中,我们介绍了机器学习的一些理论知识,包括什么是监督学习、无监督学习、过拟合欠拟合等等,那在本篇文章中,我们会以KNN来正式介绍什么是有监督学习,让大家在了解KNN的同时完全掌握什么是有监督学习,以帮助大家更好的理解机器学习。注:本篇文章非常详细,附带简单易懂的文字说明和实现代码,欢迎收藏后慢慢阅读。监督学习算法本文主要介绍的有监督学习算法是KNN,后续会接着介绍决策树、线性回归等算法。

    2022年5月28日
    47
  • response对象设置输出缓冲大小

    response对象设置输出缓冲大小

    2021年6月12日
    88
  • ComfyUI 調用 Nano Banana Pro API 完全教程:從零開始配置 API易 端點

    ComfyUI 調用 Nano Banana Pro API 完全教程:從零開始配置 API易 端點

    2026年3月15日
    2
  • Lytro光场相机的原理,科普,简单地进行了解

    Lytro光场相机的原理,科普,简单地进行了解近期看大家都在利用光场相机来得到图像的深度 进而对图像进行恢复 以及前景背景的分离 之前自己的手机也有一个功能 就是先拍照 后对焦 说白了其实就是拍很多张不同焦距照片 然后算法合成 贴一个帖子 想深入学习的可以看一下 http blog sina com cn s blog 628720210102 html 想必 大家在找到我文章之前也看了好多了 会有很多模糊的概念 1 主镜头和感光元件

    2026年3月19日
    3
  • Android Handler消息机制原理最全解读(持续补充中)

    Android Handler消息机制原理最全解读(持续补充中)Handler 在 Android 开发的过程中 我们常常会将耗时的一些操作放在子线程 workthread 中去执行 然后将执行的结果告诉 UI 线程 mainthread 熟悉 Android 的朋友都知道 UI 的更新只能通过 Mainthread 来进行 那么这里就涉及到了如何将子线程的数据传递给 mainthread 呢 Android 已经为我们提供了一个消息传递的机制 Hand

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号