項目描述:顯示 用戶頭像、用戶名、電話號碼
如下圖所示:
開發步驟
1.寫一個 activity_main.xml 佈局 添加 ListView 控件
2.寫一個 contact_item.xml 佈局 ImageView(頭像)TextView(name)、TextView(number);
3.MainActivity.java
3.1.聲明 ListView
3.2 數據源 List<Contact>data;
創建一個實體類 Contact.java 並且添加屬性 頭像、名、號碼
3.3 聲明一個 ContactAdapter
ContactAdapter extends BaseAdapter
數據源
模板
上下文對象
3.4 創建數據對象,添加數據
3.5 初始化 ListView
3.6 創建 adapter
3.6 爲 ListView 配置 adapter
activity_main.xml
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="cn.sophia.listview.MainActivity" >
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
></ListView>
</RelativeLayout>
contact_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<RelativeLayout
android:id="@+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/imageView"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/headimage01" />
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_toRightOf="@+id/imageView"
android:orientation="vertical" >
<TextView
android:id="@+id/tvName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="bottom"
android:paddingLeft="20dp"
android:text="sohpia" />
<TextView
android:id="@+id/tvNumber"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="bottom"
android:paddingLeft="20dp"
android:text="10086" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
Contact.java
package cn.sophia.listview;
public class Contact {
public String name;
public String number;
public int image;
public Contact(String name, String number, int image) {
super();
this.name = name;
this.number = number;
this.image = image;
}
}
ContactAdapte.java
package cn.sophia.listview;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView.FindListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class ContactAdapter extends BaseAdapter {
// 聲明數據源
private List<Contact> data;
// 聲明 模板
private LayoutInflater inflater;
// 聲明上下文
private Context context;
public ContactAdapter(List<Contact> data, Context context) {
super();
this.data = data;
inflater = inflater.from(context);
}
// 創建一個 ViewHolder 類,用於封裝模板中的各個空間
class ViewHolder {
TextView sortKey;
ImageView imageView;
TextView tvName;
TextView tvNumber;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Contact contact = data.get(position);
// 聲明 ViewHolder;
ViewHolder holder;
// 判斷 converView 是否爲空
if (convertView == null) {
// 創建 ViewHolder
holder = new ViewHolder();
// 加載模板
convertView = inflater.inflate(R.layout.contact_item, null);
// 獲得模板中的 控件
holder.imageView = (ImageView) convertView
.findViewById(R.id.imageView);
holder.tvName = (TextView) convertView.findViewById(R.id.tvName);
holder.tvNumber = (TextView) convertView
.findViewById(R.id.tvNumber);
convertView.setTag(holder);
// 放進 holder中
} else {
holder = (ViewHolder) convertView.getTag();
}
// 給 holder 設置數據
holder.imageView.setImageResource(contact.image);
holder.tvName.setText(contact.name);
holder.tvNumber.setText(contact.number);
return convertView;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
}
MainActivity.java
package cn.sophia.listview;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.ListView;
public class MainActivity extends Activity {
// 聲明ListView
private ListView listView;
// 聲明數據源
private List<Contact> data;
// 聲明 adapter
private ContactAdapter adapter;
// 聲明
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化控件
listView = (ListView) findViewById(R.id.listView);
data = new ArrayList<Contact>();
data.add(new Contact("sophia1", "11111111111", R.drawable.headimage01));
data.add(new Contact("aaaa", "11111111112", R.drawable.headimage02));
data.add(new Contact("aaaaa2", "11111111113", R.drawable.headimage03));
data.add(new Contact("cccc7", "11111111114", R.drawable.headimage04));
data.add(new Contact("ccccc8", "11111111115", R.drawable.headimage05));
data.add(new Contact("bbbbbb9", "11111111116", R.drawable.headimage06));
data.add(new Contact("ddddddd1", "11111111117", R.drawable.headimage07));
data.add(new Contact("fffffff", "11111111118", R.drawable.headimage08));
data.add(new Contact("fffffff", "11111111119", R.drawable.headimage09));
data.add(new Contact("ggggggg", "11111111110", R.drawable.headimage01));
// 創建adapter
adapter = new ContactAdapter(data, MainActivity.this);
// 爲控件配置適配器
listView.setAdapter(adapter);
}
}