熟悉安卓开发的朋友,应该都知道,ListView的使用频率在开发中时非常高的,很多应用程序都会用到它。它大概是做什么的?举个例子,我们手机的屏幕空间都是有限的,要想一次性在屏幕上显示所有内容时不可能的。当我们的应用程序中,有大量的数据需要展示的时候,就可以用到ListView来实现了。ListView可以让我们通过手指上下滑动手机屏幕,将屏幕外的数据滚动到屏幕内,让我们看见,同时屏幕上原有的内容则会滚动到屏幕外。其实我们每天几乎都在使用这个控件,比如查看微信QQ的聊天页面,翻阅新闻等等。

      现在知道ListView大概是干什么的后,我们来详细的讲解一下它的用法!

      首先,创建一个项目ListView3,一切都让android studio帮我们创建好,然后编写activity_main.xml,代码如下所示:

     

<?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">

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

</LinearLayout>



布局很简单,首先指定ListView的id,然后设置宽高均为match_parent,这样,ListView就沾满了整个布局的空间


接下来我们编写MainActivity中的代码,如下所示:



package com.example.listview3;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.lang.reflect.Array;

public class MainActivity extends AppCompatActivity {

    //作为测试数据,将以下数据传递给ListView
    private String[] data = {"Curry","Durant","Thompson","Green","Igudala","Liviston","West",
            "Clark","Mikao","Meggea","Barnes","Curry","Durant","Thompson","Green","Igudala",
            "Liviston","West","Clark","Mikao","Meggea","Barnes"
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //ArrayAdapter适配器,将上面的测试数据,适配到ListView
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                MainActivity.this, android.R.layout.simple_list_item_1, data
        );
        ListView listView = (ListView) findViewById(R.id.list_view3);
        listView.setAdapter(adapter);
    }
}



我们知道,ListView空间是用于展示大量数据的控件,在这里,我定义了一组String字符串类型的数据data,里面包含的是NBA球员的名字


但是,数组中的数据是无法直接传递给ListView控件的,这里我们用到了适配器,我选择的是ArrayAdapter。它可以通过泛型来指定要适配的数据类型,


然后在构造函数中把要适配的数据传入。由于我提供的是字符串数据,所以这里将ArrayAdapter的泛型指定为String,然后在ArrayAdapter的构造函数中,依次传入上下文以及要适配的数据。


MainActivity.this代表了这个主页面,android.R.layout.simple_list_item_1代表了ListView子项布局的id,这是一个android内置的布局文件,里面有一个TextView,用于显示数据文本。


然后我们通过findViewById获取ListView的实例,最后调用ListView的setAdapter()方法,将构造好的适配器传递进去,这样ListView和数据之间的关联就建立好了


现在运行一下程序,结果如下:



Android listview notifyDataSetChanged之后都调用哪些方法_android







可以看到,现在我们所提供的数据,已经在ListView控件显示了,此时,我们上下滑动屏幕,就可以看到屏幕外的内容滚动到了屏幕内,而原来屏幕内的内容则滚动到了屏幕外,这就是ListView控件的效果。