Android开发学习三+:ListView的使用

《Android开发实战 从学习到产品》李瑞琪编著 学习笔记

  ListView是常用的组件,以列表形式展示具体内容,且能根据数据的长度自适应显示。以垂直方式排列内部 item,item可以被定义为各种复杂界面,一般用于数据集展示。
  
  ListView(列表显示)3要素:用来展示列表的View,即item、把数据映射到ListView上的item适配器、具体将被映射的字符串、图片基本控件等数据
  
  适配器按自定义程度分3种:ArrayAdapter、SimpleAdapter及通过继承BaseAdapter来自定义Adapter。

1.ArrayAdapter适配器实现ListView

.
  使用ArrayAdapter实现ListView只能展示一行字,功能简单。实例:
  (1)在Activity对应的布局文件中加入Listview控件:

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/list"/>

本例使用ArrayAdapter,不需要自建item,系统给使用ArrayAdapter适配器的ListView事先分配好了item,只需去调用既可。
  (2)初始化ArrayAdapter及数据集。详细功能见代码中注释

package com.example.day0926listview;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

    private ListView listView;
    String[] dataArr = new String[15]; //创建数据集

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();
        initView();
    }

    private void initView(){
        listView = (ListView)findViewById(R.id.list);
        //ArrayAdapter适配器在初始化时需传入3个参数:①上下文对象 ②列表条目的item ③数据集
        ArrayAdapter<String>arrayAdapter =
                new ArrayAdapter<String>(this,android.R.layout.     //上下文对象传入的是当前对象
                        simple_expandable_list_item_1,dataArr);             //传入item是系统自带,需android.R.layout.simple_expandable_list_item_1获取
                                                                            //数据集数组dataArr(必须数组类型)
        listView.setAdapter(arrayAdapter);
    }

    private void initData(){	//对数据集赋值
        for (int i=0;i<15;i++){
            dataArr[i] = "第"+i+"个item";
        }
    }
}

运行结果:

在这里插入图片描述

2.SimpleAdapter适配器实现Listview


  SimpleAdapte来实现ListView有一定的扩充性,可以实现一定的自定义效果,这种效果是通过创建item样式来实现的。
  
  (1)创建一个名为item_list.xml的item布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/item_draw"
        android:layout_weight="1"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/item_text"
        android:layout_weight="1"
        android:textSize="24sp"/>

</LinearLayout>

上述布局文件用来展示一个图像和一行文字。
  (2)在上个例子中ListView加入Activity对应布局文件中代码无需改变,在Activity中将ArrayAdapter改为SimpleAdapter,同时修改数据集等:

package com.example.day0926listview;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    private ListView listView;
    private List<Map<String,Object>> dataList = new ArrayList<Map<String,Object>>();
    private int[] itemIdArr = new int[]{R.id.item_text,R.id.item_draw};
    private String[] dataKeyArr = new String[]{"name","draw"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();
        initView();
    }

    private void initView(){
        listView = (ListView)findViewById(R.id.list);
         
        SimpleAdapter simpleAdapter =
                new SimpleAdapter(this,dataList,R.layout.item_list,dataKeyArr,itemIdArr);             
                                                                          
        listView.setAdapter(simpleAdapter);
    }

    private void initData(){
        Map<String,Object> map;
        for (int i=0;i<15;i++){
            map = new HashMap<String,Object>();
            map.put("name","第"+i+"个item");
            map.put("draw",R.drawable.cry);
            dataList.add(map);
        }
    }
}

运行结果:

在这里插入图片描述
Java没学好,Android也凉凉,(流下了不学无术的眼泪)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章