利用List View控件设计一个通讯录,要求每条信息包含头像、姓名和电话号码三部分内容。
时间: 2024-06-10 17:05:03 浏览: 114
好的,以下是实现这个功能的一些步骤:
1. 在布局文件中使用ListView控件,并设置其item布局文件。
2. 在item布局文件中添加ImageView、TextView控件,分别用于显示头像、姓名和电话号码。
3. 在代码中创建适配器Adapter,重写getView()方法,设置每个item显示的内容及其点击事件。
4. 在MainActivity中设置ListView的适配器,绑定数据源。
具体实现可以参考以下代码:
布局文件:
```
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@null"
android:dividerHeight="0dp"
android:scrollbars="none"
android:padding="8dp"
android:clipToPadding="false"
/>
```
item布局文件:
```
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
>
<ImageView
android:id="@+id/avatar"
android:layout_width="64dp"
android:layout_height="64dp"
android:src="@drawable/avatar_placeholder"
/>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
>
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="姓名"
android:textSize="16sp"
android:textColor="@color/black"
/>
<TextView
android:id="@+id/phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="电话号码"
android:textSize="14sp"
android:textColor="@color/gray"
/>
</LinearLayout>
</LinearLayout>
```
适配器Adapter:
```
public class ContactsAdapter extends BaseAdapter {
private Context mContext;
private List<Contact> mContacts;
public ContactsAdapter(Context context, List<Contact> contacts) {
mContext = context;
mContacts = contacts;
}
@Override
public int getCount() {
return mContacts.size();
}
@Override
public Object getItem(int position) {
return mContacts.get(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(mContext).inflate(R.layout.item_contact, parent, false);
holder = new ViewHolder();
holder.avatar = convertView.findViewById(R.id.avatar);
holder.name = convertView.findViewById(R.id.name);
holder.phone = convertView.findViewById(R.id.phone);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Contact contact = mContacts.get(position);
holder.avatar.setImageResource(contact.getAvatar());
holder.name.setText(contact.getName());
holder.phone.setText(contact.getPhone());
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO: item点击事件
}
});
return convertView;
}
private static class ViewHolder {
ImageView avatar;
TextView name;
TextView phone;
}
}
```
Contact数据模型:
```
public class Contact {
private int mAvatar;
private String mName;
private String mPhone;
public Contact(int avatar, String name, String phone) {
mAvatar = avatar;
mName = name;
mPhone = phone;
}
public int getAvatar() {
return mAvatar;
}
public String getName() {
return mName;
}
public String getPhone() {
return mPhone;
}
}
```
MainActivity中使用适配器:
```
public class MainActivity extends AppCompatActivity {
private ListView mListView;
private List<Contact> mContacts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = findViewById(R.id.list_view);
mContacts = new ArrayList<>();
mContacts.add(new Contact(R.drawable.avatar_1, "张三", "13812345678"));
mContacts.add(new Contact(R.drawable.avatar_2, "李四", "13912345678"));
mContacts.add(new Contact(R.drawable.avatar_3, "王五", "13612345678"));
mContacts.add(new Contact(R.drawable.avatar_4, "赵六", "13712345678"));
ContactsAdapter adapter = new ContactsAdapter(this, mContacts);
mListView.setAdapter(adapter);
}
}
```
这样就完成了一个简单的通讯录ListView的实现。其中,Contact可以用数据库来存储。实际项目中,还需加入搜索功能、自动排序、批量删除等更加全面的功能,这里就不再赘述。
阅读全文