版权声明:本文为博主原创文章,转载请注明出处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布局,并对相应的列表信息赋值。
.java文件
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>
源码下载地址