几种给list添加表项的方法

本文介绍了如何在XML布局文件中实现ListView,并展示了如何通过ArrayAdapter及SimpleAdapter填充简单和复杂的数据。对于简单的字符串数组,可以直接使用ArrayAdapter;而对于包含图片和文字的复杂条目,则可以通过List和Map结合SimpleAdapter来实现。
  • 直接在xml中添加listview。
  • 写成数组。
    • res/values/arrays.xml中写个book数组
    • 引用的时候,在main.xml中的listview中使用android:entries="@array/books"
  • main.xml中定义listview(起名为:list2)。主文件中使用arrayadapter。
    • 用一个string数组来包含表项内容。String[] arr = {"悟空","悟能","悟静"};
    • 将数组包装ArrayAdapter。ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr);
    • 为ListView设置Adapter。list2.setAdapter(arrayAdapter);
  • 主文件继承ListActivity
    • 用一个string数组来包含表项内容。String[] arr = {"悟空","悟能","悟静"};
    • 将数组包装ArrayAdapter。ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr)
    • 设置该窗口显示列表。setListAdapter(adapter);
  • 比较复杂的表项,比如QQ那种,有头像有名字的。
    • 定义名字数组String[] names = new String[]{内容},定义头像数组int[] imageIds = new int[]{内容}
    • 创建一个List集合,List集合的元素是Map。
      • List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
          for (int i = 0; i < names.length; i++)
          {
           Map<String, Object> listItem = new HashMap<String, Object>();
           listItem.put("header", imageIds[i]);
           listItem.put("personName", names[i]);
           listItems.add(listItem);
          }
    • 创建一个SimpleAdapter
        SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.main, new String[]{ "personName", "header" }, new int[]{R.id.name , R.id.header});
        ListView list = (ListView)findViewById(R.id.mylist);
    • 为ListView设置Adapter
        list.setAdapter(simpleAdapter);
### C# 中 `List` 的初始化方法及其区别 在 C# 中,`List<T>` 是一种泛型集合类型,提供了多种初始化方式来满足不同的需求。以下是常见的几种初始化方法以及它们之间的区别: #### 方法一:通过无参构造函数初始化 这是最基础的方式之一,先创建一个空的 `List<T>` 对象,然后再向其中添加元素。 ```csharp List<string> list = new List<string>(); list.Add("one"); list.Add("two"); list.Add("three"); ``` 这种方式适用于需要动态添加大量未知数量的元素的情况[^1]。 --- #### 方法二:使用集合初始化器语法 集合初始化器允许在声明时直接指定初始值,简化了代码书写过程。 ```csharp List<string> list = new List<string> { "one", "two", "three" }; ``` 此方法的优点在于简洁明了,适合于已知固定数量和内容的情况下使用[^1]。 --- #### 方法三:基于数组或其他集合进行初始化 可以利用现有的数组或另一个集合作为输入源来构建新的 `List<T>` 实例。 ```csharp string[] array = { "one", "two", "three" }; List<string> list = new List<string>(array); ``` 这种方法特别适用于已有数据存储在一个数组或者其他兼容类型的集合中,并希望快速转换成 `List<T>` 形式的场合。 --- ### 不同初始化方法的区别与适用场景分析 | 初始化方法 | 特点 | 使用场景 | |-------------------------------|--------------------------------------------------------------------------------------|------------------------------------------------------------------| | **无参构造函数** | 创建一个空列表对象,后续逐步填充 | 当不确定具体项数或者需要运行期间决定具体内容时 | | **集合初始化器** | 提供了一种紧凑的方式来一次性设置多个项目 | 已经知道确切的内容并想让代码更易读 | | **基于现有集合/数组初始化** | 利用其他容器的数据生成一个新的列表 | 需要将某种形式的数据迁移到列表结构下 | 需要注意的是,在某些特殊情况下(比如存在访问权限限制),可能无法采用特定的形式完成实例化操作。例如如果某个类内部包含了受保护或私有的字段,则不能单纯依靠列表初始化表达式实现完全的对象状态设定[^2]^。 另外对于复杂业务逻辑下的属性赋值情况(如依赖注入),通常推荐单独编写工厂模式或是配置映射工具来进行处理而不是简单的通过构造参数传递全部所需信息[^3]. 综上所述,选择合适的初始化策略取决于实际开发过程中遇到的具体问题环境和个人偏好等因素综合考量得出结论最佳实践方案即可达成目标效果. ```csharp // 示例对比三种方式 class Program { static void Main(string[] args) { // 方式一 var listA = new List<int>(); listA.Add(1); listA.Add(2); // 方式二 var listB = new List<int>{ 1, 2 }; // 方式三 int[] numbers = { 1, 2 }; var listC = new List<int>(numbers); foreach (var item in listA.Concat(listB).Concat(listC)) { Console.WriteLine(item); } } } ``` 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值