引言
该节主要介绍如何在开发中实现自定义ListView
开发流程
Step-1 新建一个Module,命名为CustomerListViewActivity
Step-2 在CustomerListViewActivity绑定的布局文件中添加ListView组件
Step-3 添加自定义布局文件设置每个Item的基本样式
Step-4 声明一个集合作为列表选项的数据源
private List
Step-5 声明一个ListView组件对象
private ListView myListView;
Step-6 自定义一个方法用于完成对列表选项数据源的封装实例化操作
private List
Step-7 实例化List列表选项集合
this.listItems = getListItems();
Step-8 创建SimpleAdapter适配器装载集合数据并设置选项样式布局
SimpleAdapter adapter = new SimpleAdapter(this, this.listItems,
R.layout.listitem_customerlistvew_activity,
new String[]{"imgPhoto", "txtNickName", "txtMessage"},
new int[]{R.id.imgPhoto, R.id.txtNickName, R.id.txtMessage});
Step-9 将列表视图组件与适配器进行绑定
this.myListView = (ListView) findViewById(R.id.myListView);
this.myListView.setAdapter(adapter);
Step-10 自定义适配器点击监听事件
// 自定义一个适配器短点击事件监听器
private class AdapterViewOcl implements AdapterView.OnItemClickListener{
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
// 获取当前选中的列表选项对象
Map selectedItem = listItems.get(position);
Toast.makeText(getApplicationContext(), "选中["+selectedItem.get("txtNickName")+"]", Toast.LENGTH_SHORT).show();
}
}
// 自定义一个适配器长点击事件监听器
private class AdapterViewLongOCL implements AdapterView.OnItemLongClickListener{
@Override
public boolean onItemLongClick(AdapterView> parent, View view, int position, long id) {
// 获取当前选中的列表选项对象
Map selectedItem = listItems.get(position);
Toast.makeText(getApplicationContext(), "长点击了["+selectedItem.get("txtNickName")+"]", Toast.LENGTH_SHORT).show();
return true;
}
}
Step-11将列表组件与点击监听事件进行绑定
// 步骤8:列表组件绑定短点击监听器
this.myListView.setOnItemClickListener(new AdapterViewOcl());
// 步骤10:列表组件绑定长点击监听器
this.myListView.setOnItemLongClickListener(new AdapterViewLongOCL());
结果展示
代码清单
activity_customer_list_view.xml
listitem_customerlistvew_activity.xml
CustomerListViewActivity.java
package com.chinasofti.demo04listview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
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;
public class CustomerListViewActivity extends AppCompatActivity {
// 步骤1:声明一个集合作为列表选项的数据源
private List> listItems;
// 步骤2:声明一个ListView组件对象
private ListView myListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_customer_list_view);
// 步骤4:实例化List列表选项集合
this.listItems = getListItems();
// 步骤5:创建SimpleAdapter适配器装载集合数据并设置选项样式布局
SimpleAdapter adapter = new SimpleAdapter(this, this.listItems,
R.layout.listitem_customerlistvew_activity,
new String[]{"imgPhoto", "txtNickName", "txtMessage"},
new int[]{R.id.imgPhoto, R.id.txtNickName, R.id.txtMessage});
// 步骤6:列表视图组件绑定适配器
this.myListView = (ListView) findViewById(R.id.myListView);
this.myListView.setAdapter(adapter);
// 步骤8:列表组件绑定短点击监听器
this.myListView.setOnItemClickListener(new AdapterViewOcl());
// 步骤10:列表组件绑定长点击监听器
this.myListView.setOnItemLongClickListener(new AdapterViewLongOCL());
}
// 步骤3:自定义一个方法用于完成对列表选项数据源的封装实例化操作
private List> getListItems(){
// 步骤3-1:声明一个空的List集合对象
List> listItems = new ArrayList<>();
// 步骤3-2:创建一个Map列表选项对象
Map item01 = new HashMap<>();
item01.put("id", 1);
item01.put("imgPhoto", R.drawable.photo01);
item01.put("txtNickName", "貂蝉");
item01.put("txtMessage", "貂蝉发送的消息消息消息发送的消息消息消息发送的消息消息消息发送的消息消息消息");
// 步骤3-3:将封装好的列表选项对象item添加到集合中
listItems.add(item01);
Map item02 = new HashMap<>();
item02.put("id", 2);
item02.put("imgPhoto", R.drawable.photo02);
item02.put("txtNickName", "西施");
item02.put("txtMessage", "西施发送的消息消息消息发送的消息消息消息发送的消息消息消息发送的消息消息消息");
listItems.add(item02);
Map item03 = new HashMap<>();
item03.put("id", 3);
item03.put("imgPhoto", R.drawable.photo03);
item03.put("txtNickName", "吕布");
item03.put("txtMessage", "吕布发送的消息消息消息发送的消息消息消息发送的消息消息消息发送的消息消息消息");
listItems.add(item03);
return listItems;
}
// 步骤7:自定义一个适配器监听器
private class AdapterViewOcl implements AdapterView.OnItemClickListener{
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
// 步骤7-1:获取当前选中的列表选项对象
Map selectedItem = listItems.get(position);
Toast.makeText(getApplicationContext(), "选中["+selectedItem.get("txtNickName")+"]", Toast.LENGTH_SHORT).show();
}
}
// 步骤9:自定义个适配器长点击监听器
private class AdapterViewLongOCL implements AdapterView.OnItemLongClickListener{
@Override
public boolean onItemLongClick(AdapterView> parent, View view, int position, long id) {
// 步骤9-1:获取当前选中的列表选项对象
Map selectedItem = listItems.get(position);
Toast.makeText(getApplicationContext(), "长点击了["+selectedItem.get("txtNickName")+"]", Toast.LENGTH_SHORT).show();
return true;
}
}
}