列表视图案例3——显示联系人
2018-03-06 11:28
351 查看
列表视图案例3——显示联系人
一、运行效果
二、实现步骤1、新建安卓应用DisplayContacts
2、准备背景图片background.jpg
3、主布局文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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:padding="15dp"
android:background="@mipmap/background"
tools:context="net.hw.display_contacts.MainActivity">
<ListView
android:id="@+id/lv_contact"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</LinearLayout>4、创建联系人列表项模板contact_list_item.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"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:id="@+id/tv_contact_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#0000ff"
android:textSize="20sp" />
<TextView
android:id="@+id/tv_contact_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="25dp"
android:textColor="#555555"
android:textSize="16sp" />
</LinearLayout>5、修改字符串资源文件strings.xml
<resources>
<string name="app_name">显示联系人(采用基适配器)</string>
</resources>6、 创建联系人实体类Contact
package net.hw.display_contacts;
/**
* Created by howard on 2017/11/13.
*/
public class Contact {
private String name;
private String phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "Contact{" +
"name='" + name + '\'' +
", phone='" + phone + '\'' +
'}';
}
}7、创建联系人适配器ContactAdapter
package net.hw.display_contacts;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
/**
* Created by howard on 2017/11/13.
*/
public class ContactAdapter extends BaseAdapter {
/**
* 联系人数组
*/
private Contact[] contacts;
/**
* 上下文环境
*/
private Context context;
/**
* 程序标记
*/
private final String TAG = "ContactAdapter";
/**
* 通过构造方法传入联系人数组
*
* @param contacts
* @param context
*/
public ContactAdapter(Context context, Contact[] contacts) {
this.context = context;
this.contacts = contacts;
}
/**
* 获取列表项个数
*/
@Override
public int getCount() {
return contacts.length;
}
/**
* 获取列表项
*/
@Override
public Object getItem(int position) {
return contacts[position];
}
/**
* 获取列表项标识
*/
@Override
public long getItemId(int position) {
return position;
}
/**
* 获取列表项视图
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
// 利用布局填充器将列表项模板转换成视图
convertView = LayoutInflater.from(context).inflate(R.layout.contact_list_item, null);
}
// 输出转换视图的哈希码
Log.d(TAG, "getView.convertView.hashcode: " + convertView.hashCode());
// 从转换视图里获取控件实例
TextView tvContactName = (TextView) convertView.findViewById(R.id.tv_contact_name);
TextView tvContactPhone = (TextView) convertView.findViewById(R.id.tv_contact_phone);
// 输出转换视图里控件的哈希码
Log.d(TAG, "getView.convertView.tvContactName.hashcode: " + tvContactName.hashCode());
// 获取联系人数据
Contact contact = contacts[position];
// 将联系人数据显示在转换视图里
tvContactName.setText(contact.getName());
tvContactPhone.setText(contact.getPhone());
// 返回转换视图
return convertView;
}
}8、主界面类MainActivity
package net.hw.display_contacts;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
/**
* Created by howard on 2017/11/13.
*/
public class MainActivity extends Activity {
/**
* 联系人列表控件
*/
private ListView lvContact;
/**
* 联系人适配器
*/
private ContactAdapter adapter;
/**
* 联系人数组
*/
private Contact[] contacts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 利用布局资源文件设置用户界面
setContentView(R.layout.activity_main);
// 通过资源标识获得控件实例
lvContact = (ListView) findViewById(R.id.lv_contact);
// 初始化联系人数组(数据源)
contacts = getContacts();
// 创建联系人适配器
adapter = new ContactAdapter(this, contacts);
// 给联系人列表控件设置适配器
lvContact.setAdapter(adapter);
}
/**
* 获取联系人数组
*/
private Contact[] getContacts() {
// 定义联系人数组
Contact[] contacts = new Contact[10];
contacts[0] = new Contact();
contacts[0].setName("凤飞飞");
contacts[0].setPhone("1581212450");
contacts[1] = new Contact();
contacts[1].setName("费翔");
contacts[1].setPhone("1534562350");
contacts[2] = new Contact();
contacts[2].setName("郑智化");
contacts[2].setPhone("1511912450");
contacts[3] = new Contact();
contacts[3].setName("邓丽君");
contacts[3].setPhone("1555656450");
contacts[4] = new Contact();
contacts[4].setName("童安格");
contacts[4].setPhone("1391212000");
contacts[5] = new Contact();
contacts[5].setName("谭咏麟");
contacts[5].setPhone("1591289450");
contacts[6] = new Contact();
contacts[6].setName("张学友");
contacts[6].setPhone("1592323450");
contacts[7] = new Contact();
contacts[7].setName("李克勤");
contacts[7].setPhone("1531256750");
contacts[8] = new Contact();
contacts[8].setName("陈奕迅");
contacts[8].setPhone("1591256750");
contacts[9] = new Contact();
contacts[9].setName("小冬瓜");
contacts[9].setPhone("15923456690");
// 返回联系人数组
return contacts;
}
}9、运行程序,看看效果
打开Android Monitor窗口,看看输出的调试信息:
第一个联系人“凤飞飞”对应的控件的哈希码:109670095
此时,在手机屏幕上向上滑动,显示余下的联系人信息:
此时,看到了“小冬瓜”,但是“凤飞飞”隐藏了。
在手机屏幕上,向下滑动,重新让“凤飞飞”显示出来:
此时,大家可以看到,联系人“凤飞飞”对应控件的哈希码依然是109670095,没有变化。
转换视图里的控件如何已经创建过,就不需要再次创建。为此,我们可以优化代码,提高效率。
10、修改联系人适配器ContactAdapter
三、课后作业利用基适配器完成如下界面:
一、运行效果
二、实现步骤1、新建安卓应用DisplayContacts
2、准备背景图片background.jpg
3、主布局文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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:padding="15dp"
android:background="@mipmap/background"
tools:context="net.hw.display_contacts.MainActivity">
<ListView
android:id="@+id/lv_contact"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</LinearLayout>4、创建联系人列表项模板contact_list_item.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"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:id="@+id/tv_contact_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#0000ff"
android:textSize="20sp" />
<TextView
android:id="@+id/tv_contact_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="25dp"
android:textColor="#555555"
android:textSize="16sp" />
</LinearLayout>5、修改字符串资源文件strings.xml
<resources>
<string name="app_name">显示联系人(采用基适配器)</string>
</resources>6、 创建联系人实体类Contact
package net.hw.display_contacts;
/**
* Created by howard on 2017/11/13.
*/
public class Contact {
private String name;
private String phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "Contact{" +
"name='" + name + '\'' +
", phone='" + phone + '\'' +
'}';
}
}7、创建联系人适配器ContactAdapter
package net.hw.display_contacts;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
/**
* Created by howard on 2017/11/13.
*/
public class ContactAdapter extends BaseAdapter {
/**
* 联系人数组
*/
private Contact[] contacts;
/**
* 上下文环境
*/
private Context context;
/**
* 程序标记
*/
private final String TAG = "ContactAdapter";
/**
* 通过构造方法传入联系人数组
*
* @param contacts
* @param context
*/
public ContactAdapter(Context context, Contact[] contacts) {
this.context = context;
this.contacts = contacts;
}
/**
* 获取列表项个数
*/
@Override
public int getCount() {
return contacts.length;
}
/**
* 获取列表项
*/
@Override
public Object getItem(int position) {
return contacts[position];
}
/**
* 获取列表项标识
*/
@Override
public long getItemId(int position) {
return position;
}
/**
* 获取列表项视图
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
// 利用布局填充器将列表项模板转换成视图
convertView = LayoutInflater.from(context).inflate(R.layout.contact_list_item, null);
}
// 输出转换视图的哈希码
Log.d(TAG, "getView.convertView.hashcode: " + convertView.hashCode());
// 从转换视图里获取控件实例
TextView tvContactName = (TextView) convertView.findViewById(R.id.tv_contact_name);
TextView tvContactPhone = (TextView) convertView.findViewById(R.id.tv_contact_phone);
// 输出转换视图里控件的哈希码
Log.d(TAG, "getView.convertView.tvContactName.hashcode: " + tvContactName.hashCode());
// 获取联系人数据
Contact contact = contacts[position];
// 将联系人数据显示在转换视图里
tvContactName.setText(contact.getName());
tvContactPhone.setText(contact.getPhone());
// 返回转换视图
return convertView;
}
}8、主界面类MainActivity
package net.hw.display_contacts;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
/**
* Created by howard on 2017/11/13.
*/
public class MainActivity extends Activity {
/**
* 联系人列表控件
*/
private ListView lvContact;
/**
* 联系人适配器
*/
private ContactAdapter adapter;
/**
* 联系人数组
*/
private Contact[] contacts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 利用布局资源文件设置用户界面
setContentView(R.layout.activity_main);
// 通过资源标识获得控件实例
lvContact = (ListView) findViewById(R.id.lv_contact);
// 初始化联系人数组(数据源)
contacts = getContacts();
// 创建联系人适配器
adapter = new ContactAdapter(this, contacts);
// 给联系人列表控件设置适配器
lvContact.setAdapter(adapter);
}
/**
* 获取联系人数组
*/
private Contact[] getContacts() {
// 定义联系人数组
Contact[] contacts = new Contact[10];
contacts[0] = new Contact();
contacts[0].setName("凤飞飞");
contacts[0].setPhone("1581212450");
contacts[1] = new Contact();
contacts[1].setName("费翔");
contacts[1].setPhone("1534562350");
contacts[2] = new Contact();
contacts[2].setName("郑智化");
contacts[2].setPhone("1511912450");
contacts[3] = new Contact();
contacts[3].setName("邓丽君");
contacts[3].setPhone("1555656450");
contacts[4] = new Contact();
contacts[4].setName("童安格");
contacts[4].setPhone("1391212000");
contacts[5] = new Contact();
contacts[5].setName("谭咏麟");
contacts[5].setPhone("1591289450");
contacts[6] = new Contact();
contacts[6].setName("张学友");
contacts[6].setPhone("1592323450");
contacts[7] = new Contact();
contacts[7].setName("李克勤");
contacts[7].setPhone("1531256750");
contacts[8] = new Contact();
contacts[8].setName("陈奕迅");
contacts[8].setPhone("1591256750");
contacts[9] = new Contact();
contacts[9].setName("小冬瓜");
contacts[9].setPhone("15923456690");
// 返回联系人数组
return contacts;
}
}9、运行程序,看看效果
打开Android Monitor窗口,看看输出的调试信息:
第一个联系人“凤飞飞”对应的控件的哈希码:109670095
此时,在手机屏幕上向上滑动,显示余下的联系人信息:
此时,看到了“小冬瓜”,但是“凤飞飞”隐藏了。
在手机屏幕上,向下滑动,重新让“凤飞飞”显示出来:
此时,大家可以看到,联系人“凤飞飞”对应控件的哈希码依然是109670095,没有变化。
转换视图里的控件如何已经创建过,就不需要再次创建。为此,我们可以优化代码,提高效率。
10、修改联系人适配器ContactAdapter
package net.hw.display_contacts; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; /** * Created by howard on 2017/11/13. */ public class ContactAdapter extends BaseAdapter { /** * 联系人数组 */ private Contact[] contacts; /** * 上下文环境 */ private Context context; /** * 程序标记 */ private final String TAG = "ContactAdapter"; /** * 通过构造方法传入联系人数组 * */ public ContactAdapter(Context context, Contact[] contacts) { this.context = context; this.contacts = contacts; } /** * 获取列表项个数 */ @Override public int getCount() { return contacts.length; } /** * 获取列表项 */ @Override public Object getItem(int position) { return contacts[position]; } /** * 获取列表项标识 */ @Override public long getItemId(int position) { return position; } /** * 获取列表项视图 */ @Override public View getView(int position, View convertView, ViewGroup parent) { // 声明视图容器 ViewHolder holder; if (convertView == null) { // 转换视图不存在 // 利用布局填充器将列表项模板转换成视图 convertView = LayoutInflater.from(context).inflate(R.layout.contact_list_item, null); // 创建视图容器对象 holder = new ViewHolder(); // 实例化视图容器里的控件 holder.tvContactName = (TextView) convertView.findViewById(R.id.tv_contact_name); holder.tvContactPhone = (TextView) convertView.findViewById(R.id.tv_contact_phone); // 将视图容器附加到转换视图 convertView.setTag(holder); } else { // 转换视图已经存在 // 从转化视图里获取视图容器 holder = (ViewHolder) convertView.getTag(); } // 输出转换视图的哈希码 Log.d(TAG, "getView.convertView.hashcode: " + convertView.hashCode()); // 从视图容器里获取控件对象 TextView tvContactName = holder.tvContactName; TextView tvContactPhone = holder.tvContactPhone; // 输出转换视图里控件的哈希码 Log.d(TAG, "getView.convertView.tvContactName.hashcode: " + tvContactName.hashCode()); // 获取联系人数据 Contact contact = contacts[position]; // 将联系人数据显示在转换视图里 tvContactName.setText(contact.getName()); tvContactPhone.setText(contact.getPhone()); // 返回转换视图 return convertView; } /** * 视图容器,包换转换视图里的控件 */ private static class ViewHolder { TextView tvContactName; TextView tvContactPhone; } }11、运行程序,看看结果
三、课后作业利用基适配器完成如下界面:
相关文章推荐
- 列表视图案例2——显示用户列表
- 实现联系人列表滑动显示提示信息 以及弹出选择菜单
- 删除Outlook联系人文件夹/删除多余的联系人文件夹/从"显示名称来源"列表里删除联系人文件夹
- 显示联系人列表2 分类标题栏
- MFC树控件与列表视图控件的响应和数据库记录在列表视图的显示
- 联系人列表的显示方法和设备
- 个人完成案例之乐学成语(显示学习列表和连接主界面)
- Exchange 2010 OWA Lync联系人列表故障案例
- android 怎么调用联系人列表,并将选择的联系人号码显示在文本框里
- android开发教程之使用listview显示qq联系人列表
- IOS开发列表显示视图及数据流程(简化版)
- 显示一个列表视图图表
- 【iOS7的一些总结】10、用列表显示内容(下)列表视图控制器UITableViewController
- wss,sps2003高级日历部件,可以将多个事件类列表按视图条件汇总,以日历形式显示出来
- outlook无法显示联系人列表解决方法
- 安卓学习之路之如何显示一个listview列表视图
- 显示一个列表视图 图表
- 列表视图(ListView)显示及事件处理总结
- 浮动5-常用列表显示(案例)
- Moss/Sharepoint 为特定用户组设置特定视图以及可见视图,自定义列表新建页,修改页和显示页(无代码法)