目录
基于Empty Activity模板创建安卓应用ContactList
创建联系人列表项模板 contact_list_item.xml
一般会继承基适配器创建自定义适配器,可以更加灵活地使用列表控件绑定数据源
自定义适配器案例创建联系人
基于Empty Activity
模板创建安卓应用ContactList
将图片素材拷贝到drawable
目录
创建字符串资源文件strings.xml
具体代码:
<resources> <string name="app_name">联系人(采用基适配器)</string> </resources>
打开主布局资源文件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:background="@drawable/background" android:padding="10dp" tools:context=".MainActivity"> <ListView android:id="@+id/lv_contact" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
创建联系人列表项模板 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"> <LinearLayout android:layout_width="match_parent" android:layout_height="120dp" android:gravity="center_vertical" android:orientation="horizontal"> <ImageView android:id="@+id/iv_contact_icon" android:layout_width="60dp" android:layout_height="60dp" android:layout_marginRight="10dp" android:scaleType="fitXY" android:src="@drawable/img1" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/tv_contact_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="陈燕文" 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="30dp" android:text="191448949868" android:textColor="#555555" android:textSize="16sp" /> </LinearLayout> </LinearLayout> </LinearLayout>
查看预览效果
创建联系人实体类 Contact
具体代码:
package net.zyt.contact_list; /** * 功能:联系人实体类 * 日期:2022年11月28日 */ public class Contact { private int icon;//联系人图标 private String name;//联系人姓名 private String phone;//联系人电话 public int getIcon() { return icon; } public void setIcon(int icon) { this.icon = icon; } 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{" + "icon=" + icon + ", name='" + name + '\'' + ", phone='" + phone + '\'' + '}'; } }
创建联系人适配器ContactAdapter
具体代码:
package net.zyt.contact_list; import android.content.Context; import android.hardware.lights.LightState; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.List; /** * 功能: * 作者:赵玉婷 * 日期:2022年11月28日 */ //功能:联系人适配器 public class ContactAdapter extends BaseAdapter { private Context context;//上下文 private List<Contact> contacts;//联系人列表 //构造方法 // @param Context // @param Contacts public ContactAdapter(Context context, List<Contact> contacts) { this.context = context; this.contacts = contacts; } // return列表项个数 @Override public int getCount() { return contacts.size(); } // @param position // return 联系人对象 @Override public Object getItem(int position) { return contacts.get(position); } // @param position // return 列表项位置 @Override public long getItemId(int position) { return position; } // @param position // return convertView @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.ivIcon=convertView.findViewById(R.id.iv_contact_icon); holder.tvName=convertView.findViewById(R.id.tv_contact_name); holder.tvPhone=convertView.findViewById(R.id.tv_contact_phone); //将视图附加到转换视图 convertView.setTag(holder); }else { holder = (ViewHolder) convertView.getTag(); } // //转换视图通过资源标识符获取控件 // ImageView ivIcon=convertView.findViewById(R.id.iv_contact_icon); // TextView tvName=convertView.findViewById(R.id.tv_contact_name); // TextView tvPhone=convertView.findViewById(R.id.tv_contact_phone); //获取用户选择的联系人数据 Contact contact=contacts.get(position); //利用联系人数据设置转换视图里的控件 holder.ivIcon.setImageResource(contact.getIcon());//设置联系人图标 holder.tvName.setText(contact.getName());//设置联系人姓名 holder.tvPhone.setText(contact.getPhone());//设置联系人电话 //返回转换视图 return convertView; } private static class ViewHolder{ ImageView ivIcon;//联系人图标 TextView tvName;//联系人姓名 TextView tvPhone;//联系人电话 } }
打开主界面类 MainActivity
具体代码:
package net.zyt.contact_list; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private ListView lvContact;//联系人列表控件 private ContactAdapter adapter;//联系人适配器 private List<Contact> contacts;//联系人列表 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //通过资源标识符获取控件实例 lvContact=findViewById(R.id.lv_contact); //获取联系人列表作为数据源 contacts=getContacts(); //创建联系人适配器 adapter=new ContactAdapter(this,contacts); //给联系人列表控件设置适配器 lvContact.setAdapter(adapter); //给联系人列表控件注册项单击监听器 lvContact.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //获取用户选择的联系人数据 Contact contact=contacts.get(position); //弹出吐司选择联系人信息 Toast.makeText(MainActivity.this, contact.getName()+":"+contact.getPhone(), Toast.LENGTH_SHORT).show(); } }); } /** * @return 联系人列表 */ private List<Contact> getContacts() { // 创建联系人列表 List<Contact> contacts = new ArrayList<>(); // 声明联系人 Contact contact = null; // 创建第1个联系人 contact = new Contact(); contact.setIcon(R.drawable.img1); contact.setName("李晓红"); contact.setPhone("15878782345"); // 将联系人添加到联系人列表 contacts.add(contact); // 创建第2个联系人 contact = new Contact(); contact.setIcon(R.drawable.img2); contact.setName("王晓玲"); contact.setPhone("15956567890"); // 将联系人添加到联系人列表 contacts.add(contact); // 创建第3个联系人 contact = new Contact(); contact.setIcon(R.drawable.img3); contact.setName("董大伟"); contact.setPhone("13567891230"); // 将联系人添加到联系人列表 contacts.add(contact); // 创建第4个联系人 contact = new Contact(); contact.setIcon(R.drawable.img4); contact.setName("尚洪文"); contact.setPhone("18856789032"); // 将联系人添加到联系人列表 contacts.add(contact); // 创建第5个联系人 contact = new Contact(); contact.setIcon(R.drawable.img5); contact.setName("唐语涵"); contact.setPhone("15967893450"); // 将联系人添加到联系人列表 contacts.add(contact); // 创建第6个联系人 contact = new Contact(); contact.setIcon(R.drawable.img6); contact.setName("郑智化"); contact.setPhone("15867678904"); // 将联系人添加到联系人列表 contacts.add(contact); // 创建第7个联系人 contact = new Contact(); contact.setIcon(R.drawable.img7); contact.setName("童安格"); contact.setPhone("13845674560"); // 将联系人添加到联系人列表 contacts.add(contact); // 返回联系人列表 return contacts; } }
启动应用查看效果: