BaseAdapter
使用BaseAdapter比較簡單,主要是通過繼承此類來實作BaseAdapter的四個方法:
public int getCount(): 擴充卡中資料集的資料個數;
public Object getItem(int position): 擷取資料集中與索引對應的資料項;
public long getItemId(int position): 擷取指定行對應的ID;
public View getView(int position,View convertView,ViewGroup parent): 擷取沒一行Item的顯示内容。
執行個體
建立布局檔案 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context=".MainActivity">
<ListView
android:id="@+id/lv_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
item.xml (ListView中每條資訊的顯示布局)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_image"
android:src="@mipmap/ic_launcher"
android:layout_width="60dp"
android:layout_height="60dp"/>
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_toEndOf="@id/iv_image"
android:text="Title"
android:gravity="center"
android:textSize="25sp"/>
<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/iv_image"
android:layout_below="@id/tv_title"
android:text="Content"
android:textSize="20sp"/>
</RelativeLayout>
建立資料源 ItemBean.java
public class ItemBean {
public int itemImageResId;//圖像資源ID
public String itemTitle;//标題
public String itemContent;//内容
public ItemBean(int itemImageResId, String itemTitle, String itemContent) {
this.itemImageResId = itemImageResId;
this.itemTitle = itemTitle;
this.itemContent = itemContent;
}
}
通過此Bean類,我們就将要顯示的資料與ListView的布局内容一一對應了,每個Bean對象對應ListView的一條資料。這種方法在ListView中使用的非常廣泛。java—泛型
MainActivity.java
public class MainActivity extends AppCompatActivity {
ListView mListView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<ItemBean> itemBeanList = new ArrayList<>();
itemBeanList.add(new ItemBean(R.mipmap.p1, "标題" , "内容" ));
itemBeanList.add(new ItemBean(R.mipmap.p2, "标題" , "内容" ));
mListView = (ListView) findViewById(R.id.lv_main);
//設定ListView的資料擴充卡
mListView.setAdapter(new MyAdapter(this,itemBeanList));
}
}
建立BaseAdapter
public class MyAdapter extends BaseAdapter {
private List<ItemBean> mList;//資料源
private LayoutInflater mInflater;//布局裝載器對象
// 通過構造方法将資料源與資料擴充卡關聯起來
// context:要使用目前的Adapter的界面對象
public MyAdapter(Context context, List<ItemBean> list) {
mList = list;
mInflater = LayoutInflater.from(context);
}
@Override
//ListView需要顯示的資料數量
public int getCount() {
return mList.size();
}
@Override
//指定的索引對應的資料項
public Object getItem(int position) {
return mList.get(position);
}
@Override
//指定的索引對應的資料項ID
public long getItemId(int position) {
return position;
}
@Override
//傳回每一項的顯示内容
public View getView(int position, View convertView, ViewGroup parent) {//如果view未被執行個體化過,緩存池中沒有對應的緩存
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item,null);
}
/**
* 找到item布局檔案中對應的控件
*/
ImageView imageView = (ImageView) convertView.findViewById(R.id.iv_image);
TextView titleTextView = (TextView) convertView.findViewById(R.id.tv_title);
TextView contentTextView = (TextView) convertView.findViewById(R.id.tv_content);
//擷取相應索引的ItemBean對象
ItemBean bean = mList.get(position);
/**
* 設定控件的對應屬性值
*/
imageView.setImageResource(bean.itemImageResId);
titleTextView.setText(bean.itemTitle);
contentTextView.setText(bean.itemContent);
return convertView;
}
}