ListView的简单使用

来源:互联网 发布:excel2007数据透视表 编辑:程序博客网 时间:2024/05/17 04:57

列表的显示需要三个元素:

1.ListVeiw 用来展示列表的View。

2.适配器 用来把数据映射到ListView上的中介。

3.数据 具体的将被映射的字符串,图片,或者基本组件。

根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter

ArrayAdapter:
其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。

这里写图片描述

activity_main.xml:

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

MainActivity :

public class MainActivity extends AppCompatActivity {    private String[] data = {"Apple","Banana","Orange","Watermelon","Pear"};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(MainActivity.this,        android.R.layout.simple_list_item_1,data);        ListView listView = (ListView) findViewById(R.id.list_view);        listView.setAdapter(arrayAdapter);    }}

android.R.layout.simple_list_item_1,data是系统定义的布局文件,这个布局文件只显示一行文字


SimpleAdapter:
simpleAdapter的扩展性最好,可以定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等等。下面的代码都直接继承了ListActivity,ListActivity和普通的Activity没有太大的差别,不同就是对显示ListView做了许多优化,方面显示而已。

这里写图片描述

List_item.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <ImageView        android:id="@+id/img"        android:layout_width="50dp"        android:layout_height="50dp"        android:layout_margin="5dp"/>    <TextView        android:id="@+id/title"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <TextView        android:id="@+id/info"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>

MainActivity :

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        SimpleAdapter adapter = new SimpleAdapter(this,getData(),R.layout.list_item,                new String[]{"title","info","img"},                new int[]{R.id.title,R.id.info,R.id.img});        ListView listView = (ListView) findViewById(R.id.list_view);        listView.setAdapter(adapter);    }    private List<Map<String,Object>> getData(){        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();        Map<String,Object> map = new HashMap<String,Object>();        map.put("title","Google");        map.put("info","USA");        map.put("img",R.drawable.google);        list.add(map);        Map<String,Object> map2 = new HashMap<String,Object>();        map2.put("title","Microsoft");        map2.put("info","USA");        map2.put("img",R.drawable.microsoft);        list.add(map2);        Map<String,Object> map3 = new HashMap<String,Object>();        map3.put("title","Oracle");        map3.put("info","USA");        map3.put("img",R.drawable.oracle);        list.add(map3);        return list;    }}

使用simpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行。HashMap的每个键值数据映射到布局文件中对应id的组件上。因为系统没有对应的布局文件可用,我们可以自己定义一个布局vlist.xml。下面做适配,new一个SimpleAdapter参数一次是:this,布局文件(vlist.xml),HashMap的 title 和 info,img。布局文件的组件id,title,info,img。布局文件的各组件分别映射到HashMap的各元素上,完成适配。


SimpleCursorAdapter:
方便把从游标得到的数据进行列表显示,并可以把指定的列映射到对应的TextView中。
下面的程序是从电话簿中把联系人显示到类表中。先在通讯录中添加一个联系人作为数据库的数据。然后获得一个指向数据库的Cursor并且定义一个布局文件(当然也可以使用系统自带的)。

这里写图片描述

MainActivity:

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ListView listView = (ListView) findViewById(R.id.list_view);        Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,                        null,null,null,null);        ListAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2, cursor,                new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,                              ContactsContract.CommonDataKinds.Phone.NUMBER},                             new int[]{android.R.id.text1,android.R.id.text2});        listView.setAdapter(adapter);    }}

自定义ListView

这里写图片描述

activity_main.xml:

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

fruit_item.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal"    android:layout_width="match_parent"    android:layout_height="match_parent">   <ImageView       android:id="@+id/fruit_img"       android:layout_width="wrap_content"       android:layout_height="wrap_content" />    <TextView        android:id="@+id/fruit_name"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginLeft="10dp"/></LinearLayout>

Fruit实体类:

public class Fruit {    private String name;    private int imageId;    public Fruit(String name, int imageId) {        this.name = name;        this.imageId = imageId;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getImageId() {        return imageId;    }    public void setImageId(int imageId) {        this.imageId = imageId;    }}

FruitAdapter:

public class FruitAdapter extends ArrayAdapter<Fruit>{    private int resourceId;    public FruitAdapter(Context context, int resource, List<Fruit> objects) {        super(context, resource, objects);        resourceId = resource;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        Fruit fruit = getItem(position);        View view;        ViewHolder viewHolder;        if(convertView == null){            view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);            viewHolder = new ViewHolder();            viewHolder.fruit_name = view.findViewById(R.id.fruit_name);            viewHolder.fruit_img = view.findViewById(R.id.fruit_img);            view.setTag(viewHolder);//将viewHolder对象存储在view中        }else{            view = convertView;            viewHolder = (ViewHolder) view.getTag();//重新取出viewHolder对象        }        viewHolder.fruit_name.setText(fruit.getName());        viewHolder.fruit_img.setImageResource(fruit.getImageId());        Log.d("FruitAdapter","getContent(): " + getContext().getClass().getName());//MainActivity        Log.d("FruitAdapter","parent: " + parent.getClass().getName());//ListView        Log.d("FruitAdapter","view: " + view.getClass().getName());//fruit_item        return view;    }    class ViewHolder{        TextView fruit_name;        ImageView fruit_img;    }}

MainActivity:

public class MainActivity extends AppCompatActivity {    private List<Fruit> fruitList = new ArrayList<Fruit>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initFruits(); // 初始化水果数据        FruitAdapter adapter = new FruitAdapter(MainActivity.this, R.layout.fruit_item, fruitList);        ListView listView = (ListView) findViewById(R.id.list_view);        listView.setAdapter(adapter);        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view,                                    int position, long id) {                Fruit fruit = fruitList.get(position);                Toast.makeText(MainActivity.this, fruit.getName(), Toast.LENGTH_SHORT).show();            }        });    }    private void initFruits() {        for (int i = 0; i < 2; i++) {            Fruit apple = new Fruit("Apple", R.drawable.apple_pic);            fruitList.add(apple);            Fruit banana = new Fruit("Banana", R.drawable.banana_pic);            fruitList.add(banana);            Fruit orange = new Fruit("Orange", R.drawable.orange_pic);            fruitList.add(orange);            Fruit watermelon = new Fruit("Watermelon", R.drawable.watermelon_pic);            fruitList.add(watermelon);            Fruit pear = new Fruit("Pear", R.drawable.pear_pic);            fruitList.add(pear);            Fruit grape = new Fruit("Grape", R.drawable.grape_pic);            fruitList.add(grape);            Fruit pineapple = new Fruit("Pineapple", R.drawable.pineapple_pic);            fruitList.add(pineapple);            Fruit strawberry = new Fruit("Strawberry", R.drawable.strawberry_pic);            fruitList.add(strawberry);            Fruit cherry = new Fruit("Cherry", R.drawable.cherry_pic);            fruitList.add(cherry);            Fruit mango = new Fruit("Mango", R.drawable.mango_pic);            fruitList.add(mango);        }    }}
原创粉丝点击