进击的Android之ListView

本文介绍了Android开发中ListView的基本使用方法及数据适配器的重要作用。通过实例演示了ArrayAdapter与SimpleAdapter的区别及应用场景,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)基础ListView的使用
作用:android系统中显示列表的控件;
每一个ListView可以包含很多个列表项;比如这样,
这里写图片描述
那么,问题来了,listview是用来显示并加载数据的,由于数据源不同,可能加载各种不同的数据结构,比如:链表,数组,树等,那怎么办捏?放心,我们有----数据适配器 !

(二)数据适配器是干什么用的?
本质上来说,它就是来帮助你把复杂的数据(比如:数组,链表,数据库,集合等)填充在指定视图界面上的;

ArrayAdapter(数组适配器):用于绑定格式单一的数据;
数据源:可以是集合或数组
SimpleAdapter(简单适配器):用于绑定格式复杂的数据;
数据源:只能是特定泛型的集合;

数据适配器是连接数据源和视图界面的桥梁;
实现过程:新建适配器->添加数据源到适配器-> 视图加载适配器

不废话上代码:
activity_main.xml

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:layout_alignParentStart="true"
        />
items.xml

    <ImageView
        android:id="@+id/myImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/mypic"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"/>
    <TextView
        android:id="@+id/myTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:textSize="25sp"
        android:layout_marginTop="15dp"
        />

对了图片资源什么的,自己找点吧!
ManiActivity.java

<1>ArrayAdapter的使用:

         /**
         * arrayadapter的使用步骤
         * 1.新建数据适配器
         * 2.适配器加载数据源
         * 3.视图(listview)加载数据源
         *
         */
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

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


public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener , AbsListView.OnScrollListener{

    private ListView listView;
    private ArrayAdapter<String>arr_adapter;
    private SimpleAdapter simp_adapter;
    private List<Map<String,Object>>dataList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView) findViewById(R.id.listView);
        /**
         * arrayadapter的使用步骤
         * 1.新建数据适配器
         * 2.适配器加载数据源
         * 3.视图(listview)加载数据源
         *
         */
        //1.新建数据适配器
        ArrayAdapter(上下文 ,当前ListView加载的每一个列表项所对应的布局文件,数据源);
        String[] arr_date = {"listview 1" , "listview 2","listview 3","listview 4","listview 5","listview 6"};
        //2.适配器加载数据源
        dataList = new ArrayList<Map<String, Object>>();
        arr_adapter = new ArrayAdapter<String>(this ,android.R.layout.simple_list_item_1 , arr_date);

        // 3.视图(listview)加载数据源
        listView.setAdapter(arr_adapter);
        listView.setOnItemClickListener(this);
        listView.setOnScrollListener(this);
    }

    private List<Map<String,Object>> getdata()
    {
        for (int i = 0 ; i< 20 ;i++ )
        {
            Map<String,Object>map = new HashMap<String, Object>();
            map.put("pic" , R.drawable.mypic);
            map.put("text" , "给你个表情自己去体会!"+i);
            dataList.add(map);

        }

        return dataList;
    }

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {

        //获取点击ListView item中的内容信息
        String text = listView.getItemIdAtPosition(position) + "";
        //弹出Toast信息显示位置和内容
        Toast.makeText(this , "position = " + position +" "+"context= " + text , 0).show();

    }

    @Override
    public void onScrollStateChanged(AbsListView absListView, int scrollstate) {

        switch (scrollstate)
        {
            case SCROLL_STATE_FLING:
                Log.i("Main" , "用户在手指离开之前,由于用力划了一下,视图仍在加载" );
                Map<String , Object>map = new HashMap<String , Object>();
                map.put("pic" , R.drawable.robot);
                map.put("text", "我是增加项");
                dataList.add(map);
                //划到顶端或低端的判断语句
                simp_adapter.notifyDataSetChanged();
                break;
            case SCROLL_STATE_IDLE:
                Log.i("Main" , "视图已经停止划动");
                break;
            case SCROLL_STATE_TOUCH_SCROLL:
                Log.i("Main" , "手指没有离开屏幕,视图正在划动!!");
                break;

        }

    }

    @Override
    public void onScroll(AbsListView absListView, int i, int i1, int i2) {

    }
}


---------------------------------------------------------------------
<1>SimpleAdapter的使用:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

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


public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener , AbsListView.OnScrollListener{

    private ListView listView;
    private ArrayAdapter<String>arr_adapter;
    private SimpleAdapter simp_adapter;
    private List<Map<String,Object>>dataList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView) findViewById(R.id.listView);
        /**
         * simpleadapter的使用步骤
         * simpleadapter参数使用说明:
         * context:上下文
         * data:数据源(List<? extends Map<String , ? >>data)一个Map所组成的list集合
         *      每一个Map都会去对应ListView列表中的一行
         *      每一个Map(键---值对)中的键必须包含所有在from中所指定的键
         * from:键值对的名
         * resource:列表项的布局文件ID
         * to:绑定数据视图中的ID , 与from成对应关系
         *
         *
         */
        //1.新建数据适配器
        String[] arr_date = {"listview 1" , "listview 2","listview 3","listview 4","listview 5","listview 6"};
        //2.适配器加载数据源
        dataList = new ArrayList<Map<String, Object>>();
        simp_adapter = new SimpleAdapter(this , getdata(), R.layout.items,new String[]{"pic" , "text"}, new int[]{R.id.myImageView , R.id.myTextView} );
        // 3.视图(listview)加载数据源
        listView.setAdapter(simp_adapter);

        listView.setOnItemClickListener(this);
        listView.setOnScrollListener(this);
    }

    private List<Map<String,Object>> getdata()
    {
        for (int i = 0 ; i< 20 ;i++ )
        {
            Map<String,Object>map = new HashMap<String, Object>();
            map.put("pic" , R.drawable.mypic);
            map.put("text" , "给你个表情自己去体会!"+i);
            dataList.add(map);

        }

        return dataList;
    }

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {

        //获取点击ListView item中的内容信息
        String text = listView.getItemIdAtPosition(position) + "";
        //弹出Toast信息显示位置和内容
        Toast.makeText(this , "position = " + position +" "+"context= " + text , 0).show();

    }

    @Override
    public void onScrollStateChanged(AbsListView absListView, int scrollstate) {

        switch (scrollstate)
        {
            case SCROLL_STATE_FLING:
                Log.i("Main" , "用户在手指离开之前,由于用力划了一下,视图仍在加载" );
                Map<String , Object>map = new HashMap<String , Object>();
                map.put("pic" , R.drawable.robot);
                map.put("text", "我是增加项");
                dataList.add(map);
                //划到顶端或低端的判断语句
                simp_adapter.notifyDataSetChanged();
                break;
            case SCROLL_STATE_IDLE:
                Log.i("Main" , "视图已经停止划动");
                break;
            case SCROLL_STATE_TOUCH_SCROLL:
                Log.i("Main" , "手指没有离开屏幕,视图正在划动!!");
                break;

        }

    }

    @Override
    public void onScroll(AbsListView absListView, int i, int i1, int i2) {

    }
}

运行效果

这里写图片描述

哈哈~~~又学了一招!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值