天天看點

Android——擴充卡BaseAdapter執行個體

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;
    }
}