listview-适配器

listview是android应用相当广的一个控件,系统为其自定了三种属性,但是这些属性在日常商业化的开户应用中,基本上不会用到,用到的基本都会是自定义适配器,以下就一个简单的实例介绍一下如何用listview实现适配器
1、定义适配器 activity, 假设命名为 item1.xml 文件代码如下:


<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 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适配器即完成,但是该类存在一个问题没有做分页,分页后续再介绍

你可能感兴趣的:(android,android)