天天看点

【Android 学习】之ListView使用大全Android 学习之ListView使用大全

版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/u013132758。 https://blog.csdn.net/u013132758/article/details/49204949

Android 学习之ListView使用大全

ListView是列表组件,是android中常用的组件,列表显示信息由三个部分组成。

  • ListView组件。
  • 适配器,用来将用来显示的数据映射到ListView组件中。
  • 列表中要显示的数据。

Listview 的适配器有 ArrayAdapter   SimpleAdapter  SimpleCurdorAdapter。

ArrayAdapter:只显示一行文字。

SimpleAdapter:自定义显示内容。可以有图片、文字,单选框,按钮等。

SimpleCursorAdapter:以列表的形式显示数据库中的内容。例如显示联系人。

1、ArrayAdapter

.java文件

package com.example.leiqi.listview;

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

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/**
 * ListView的使用ArrayAdapter
 */
public class L extends AppCompatActivity {
    private LinearLayout mlayout;
    private ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_l);

        mlayout = (LinearLayout) this.findViewById(R.id.mlayout);
        listView = new ListView(this);
        //创建ArrayAdapter适配器,android.R.layout.simple_expandable_list_item_1:系统定义好的只显示一行文字。
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,getData());
        listView.setAdapter(adapter);
        mlayout.addView(listView);

    }
/**
 * 获取数据
 * @return List
 */
public List<String> getData(){
    List<String> mlist = new ArrayList<String>();
    mlist.add("数据项1");
    mlist.add("数据项2");
    mlist.add("数据项3");
    return mlist;
}


}
           

对应的布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:id="@+id/mlayout"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.example.leiqi.listview.L">
</LinearLayout>
           

2、SimpleAdapter

SimpleAdapter是简单且较为灵活的适配器,可以自定义XML显示每一行数据的内容。可以放图片、按钮、单选框等。

本文示例展示一个手机商品的列表,自定义布局文件listviewrow.xml实现列表中的每一行的不具备,在构建SimpleAdapter对象时加载listviewrow.xml布局,并对相应的列表信息赋值。

package com.example.leiqi.cehua;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
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 L2 extends Activity {


    private LinearLayout mlayout;
    private ListView mlist;
    //创建List对象,用于存放列表项没一行的列表信息
    List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_l2);

        mlayout =(LinearLayout) findViewById(R.id.mlayout2);

        mlist = new ListView(this);
        //创建布局参数
        LinearLayout.LayoutParams mlistParams = new LinearLayout.
                LayoutParams(
                LinearLayout.LayoutParams.FILL_PARENT,
                LinearLayout.LayoutParams.FILL_PARENT);
        //当拖拽列表时现实的颜色默认为黑色,这里设置为白色
        mlist.setCacheColorHint(Color.WHITE);
        //将列表list添加到线性布局mlayout中
        mlayout.addView(mlist,mlistParams);
        /**
         * 构建SimpleAdapter对象,构造函数共有5个参数
         * 第一个参数的含义是上下文Context
         * 第二个参数的含义是布局资源文件这里自定义的列表项布局文件
         * 第三个参数的含义是HashMap中的key信息img,name,money,zhe
         * 第四个参数的含义是listViewrow.xml 文件中的组件id
         * 第五个参数的含义是listViewrow.xml 文件中的组件id
         */
        SimpleAdapter adapter = new SimpleAdapter(this,getdata(),R.layout.listviewrow,
                new String[]{"img","name","mony","Discount"},new int[]{
                R.id.image,R.id.phonename,R.id.phonemony,R.id.phoneDiscount});
        //为列表添加适配器
        mlist.setAdapter(adapter);
        mlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            /**
             * 单击触发事件
             * parent:发生单击事件的Adapterview
             * view;被单机的View
             * position:当前单击的行在adapter 的下标
             * id:当前单击的行的id
             */
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(L2.this,
                        "您选择地是"+list.get(position).get("name").toString(),Toast.LENGTH_SHORT).show();
            }
        });

    }
/**
 * 获取列表项显示的数据
 */
public List<Map<String,Object>> getdata()
{
    Map<String,Object> map = new HashMap<String,Object>();
    map.put("img", R.drawable.l1);
    map.put("name", "摩托罗拉(moto)XT711 5G");
    map.put("mony", "2669元");
    map.put("zhe", "9折");
    list.add(map);
    map = new HashMap<String,Object>();
    map.put("img", R.drawable.l2);
    map.put("name", "Iphone 4S 3G");
    map.put("mony", "2669元");
    map.put("zhe", "9折");
    list.add(map);
    map = new HashMap<String,Object>();
    map.put("img",R.drawable.l3);
    map.put("name","三星 11 5G");
    map.put("mony", "2669元");
    map.put("zhe", "9折");
    list.add(map);
return list;
}
}           
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:id="@+id/mlayout2"
    tools:context="com.example.leiqi.cehua.L2"
    android:orientation="horizontal">


</LinearLayout>
           

listviewrow.xml 在layout目录下、

<?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="fill_parent"
    android:background="@drawable/trippoilistviewbg" >
    <!--用来显示图片-->
    <ImageView
        android:id="@+id/image"
        android:layout_width="68dp"
        android:layout_height="65dp" android:layout_margin="10dp" />
     <!--手机价格,名称,打折信息-->
        <LinearLayout
            android:orientation="vertical"
            android:layout_margin="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <TextView
                android:id="@+id/phonename"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <TextView
                android:id="@+id/phonemony"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <TextView
                android:id="@+id/phoneDiscount"
                android:textColor="#ffFF0000"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
        </LinearLayout>
</LinearLayout>           

列表按下、获取焦点、选中时的效果res/drawable/trippoilistviewbg.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!--设置按下时的效果-->
    <item android:state_pressed="true" android:drawable="@color/beijin"></item>
    <!--设置选中时的效果-->
    <item android:state_selected="true" android:drawable="@color/beijin1"></item>
    <!--设置选中时的效果-->
    <item android:state_focused="true" android:drawable="@color/beijin2"></item>
</selector>           

3.SimpleCursorAdapter

下面的例子是将通讯录中的内容显示在列表中,示例代码如下:

.java 文件

<span style="color:#330000;">package com.example.leiqi.cehua;

import android.app.Activity;
import android.database.Cursor;
import android.provider.Contacts;
import android.support.v4.widget.SimpleCursorAdapter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;

/**
 *
 */
public class L3 extends Activity {
private ListView listView;
    private LinearLayout mlayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_l3);
    mlayout = (LinearLayout) findViewById(R.id.l3);

        listView = new ListView(this);
        Cursor cursor = getContentResolver().query(Contacts.People.CONTENT_URI,null,null,null,null);
        startManagingCursor(cursor);
        ListAdapter listAdapter = new SimpleCursorAdapter(this,
                android.R.layout.simple_expandable_list_item_1,
                cursor,new String[]{Contacts.People.NAME},
                new int[]{ android.R.id.text1});
        listView.setAdapter(listAdapter);
        mlayout.addView(listView);
    }


}
</span>           
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/l3"
    tools:context="com.example.leiqi.cehua.L3">



</LinearLayout>
           
源码下载地址

继续阅读