listview-適配器

listview是android應用相當廣的一個控件,系統爲其自定了三種屬性,但是這些屬性在日常商業化的開戶應用中,基本上不會用到,用到的基本都會是自定義適配器,以下就一個簡單的實例介紹一下如何用listview實現適配器
1、定義適配器 activity, 假設命名爲 item1.xml 文件代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/img"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:src="@mipmap/ic_launcher"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/title"
            android:layout_width="240dp"
            android:layout_height="wrap_content"
            android:text="title"/>

        <TextView
            android:id="@+id/info"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:text="info" />

    </LinearLayout>

</LinearLayout>

2、爲item定義對應的數據結構類,如下所示:

package test.com.listview;

/**
* Created by Administrator on 2017-10-26.
*
* 適配器內容格式定義
*/
public class Info {
int id;
String title;
String details;
int src;

public void setId(int id){
    this.id = id;
}

public int getId(){
    return this.id;
}

public void setTitle(String title){
    this.title = title;
}

public String getTitle(){
    return this.title;
}

public void setDetails(String detail){
    this.details = detail;
}

public String getDetails(){
    return this.details;
}

public void setSrc(int src){
    this.src = src;
}

public int getSrc(){
    return this.src;
}

}

以上數據結構非常簡單,就是一個圖片加一個標題, 一個信息描述

3、實現主代碼

void testListView2(){
        //構造測試數據
        setInfo();

        lv.setAdapter(new ListViewAdapter(mListInfo));

    }
/**
     * 構造測試數據
     */
    public void setInfo(){
        mListInfo.clear();
        int i=0;
        while(i<20){
            Info information = new Info();
            information.setId(1000+i);
            information.setTitle("標題"+i);
            information.setDetails("詳細信息"+i);
            information.setSrc(R.mipmap.ic_launcher);

            mListInfo.add(information); //將新的info對象加入到信息列表中
            i++;
        }
    }

注意要定義內部類:

 /**
     *
     * 內部類
     */
    public class ListViewAdapter extends BaseAdapter {
        View[] itemViews;

        /**
         * 構造函數完成內部對像 itemViews的封裝
         * @param mlistInfo
         */
        public ListViewAdapter(List<Info> mlistInfo) {
            itemViews = new View[mlistInfo.size()];
            Info tmp = null;
            for(int i = 0; i < itemViews.length; i++){
                tmp = (Info)mlistInfo.get(i);
                itemViews[i] = makeItemView(tmp.getTitle(), tmp.getDetails(), tmp.getSrc());
            }
        }

        /**
         * 生成一個賦值的item
         * @param title
         * @param detail
         * @param src
         * @return
         */
        private View makeItemView(String title, String detail, int src) {
            //空上inflater是幹啥用的,以及其inflate方法
            LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            // 使用View的對象itemView與R.layout.item關聯
            View itemView = inflater.inflate(R.layout.item1, null);

            // 通過findViewById()方法實例R.layout.item內各組件
            TextView tvTitle = (TextView) itemView.findViewById(R.id.title);
            tvTitle.setText(title);    //填入相應的值
            TextView tvDetail = (TextView) itemView.findViewById(R.id.info);
            tvDetail.setText(detail);
            ImageView image = (ImageView) itemView.findViewById(R.id.img);
            image.setImageResource(src);

            return itemView;
        }

        @Override
        public int getCount() {
            return this.itemViews.length;
        }

        @Override
        public Object getItem(int position) {
            return this.itemViews[position];
        }

        @Override
        public long getItemId(int position) {
            //一般情況下 itemId與position相同
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if(convertView == null){
                return itemViews[position];
            }

            return convertView;
        }
    }    ;

運行即可發現,一個簡單的listview適配器即完成,但是該類存在一個問題沒有做分頁,分頁後續再介紹

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章