XListView或PullToRefresh上拉加载下拉刷新+多条目展示---在BaseAdapter中

思路:

 首先数据获取到时各式各样,这个时候我们在适配器给予不同类型的数据展示不同类型条目,具体看数据定义。

重写两个方法即:getTtemViewType()getViewTypeCount()方法,在getTtemViewType方法中有几种布局就分几种情况然后返回,然后是getView方法中通过getTtemViewType()方法获得类型type,然后就是根据布局去找空间,去赋值就好了。


换想一下以最常见的新闻App,有的一个图片,有的俩图片,还有的仨图片,这些都可以作为参考,只需要在该方法内添加判断条件,返回对应的常量即可;而这个判断条件的数据需从 传入的数据中获取

 根据个人所需去判断:

if (list.get(position).getThumbnail_pic_s03() == null) { 
       return TYPE_ONE; 
} else { 
       return TYPE_TWO; 
}

效果图:  

下面就是适配器里面的代码了 

public class MyAdapter extends BaseAdapter {
    //定义条目类型  必须从0开始
    private static final int TYPE_ONE = 0;
    private static final int TYPE_TWO = 1;
    private Context context;
    private ArrayList<Data> list;

    public MyAdapter(Context context, ArrayList<Data> list) {
        this.context = context;
        this.list = list;
    }

    //条目类型
    @Override
    public int getItemViewType(int position) {
        if (list.get(position).getThumbnail_pic_s03() == null) {
            return TYPE_ONE;
        } else {
            return TYPE_TWO;
        }
    }

    //条目类型数量
    @Override
    public int getViewTypeCount() {
        return 2;
    }

    //条目总数量
    @Override
    public int getCount() {
        return list.size();
    }

    //条目
    @Override
    public Object getItem(int position) {
        return null;
    }

    //条目id
    @Override
    public long getItemId(int position) {
        return 0;
    }

    //条目视图
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder = null;
        if (convertView == null) {
            int itemViewType = getItemViewType(position);
            //根据当前条目类型来判定所该展示的布局
            switch (itemViewType) {
                case TYPE_ONE:
                    convertView = View.inflate(context, R.layout.item_one, null);
                    //控件赋值
                    viewHolder = new ViewHolder();
                    viewHolder.title1 = convertView.findViewById(R.id.title1);
                    viewHolder.date1 = convertView.findViewById(R.id.date1);
                    viewHolder.img1 = convertView.findViewById(R.id.img1);
                    //返回视图
                    convertView.setTag(viewHolder);
                    break;
                case TYPE_TWO:
                    convertView = View.inflate(context, R.layout.item_three, null);
                    //控件赋值
                    viewHolder = new ViewHolder();
                    viewHolder.title2 = convertView.findViewById(R.id.title2);
                    viewHolder.date2 = convertView.findViewById(R.id.date2);
                    viewHolder.img2_1 = convertView.findViewById(R.id.img2_1);
                    viewHolder.img2_2 = convertView.findViewById(R.id.img2_2);
                    viewHolder.img2_3 = convertView.findViewById(R.id.img2_3);
                    //返回视图
                    convertView.setTag(viewHolder);
                    break;
            }
        } else {
            int itemViewType = getItemViewType(position);
            //根据当前条目类型来判定所该展示的视图
            switch (itemViewType) {
                case TYPE_ONE:
                    viewHolder = (ViewHolder) convertView.getTag();
                    break;
                case TYPE_TWO:
                    viewHolder = (ViewHolder) convertView.getTag();
                    break;
            }
        }
        //根据类型展示数据
        int itemViewType = getItemViewType(position);
        Data data = list.get(position);
        switch (itemViewType) {
            case TYPE_ONE:
                //给第一种条目的控件赋值
                viewHolder.title1.setText(data.getTitle());
                viewHolder.date1.setText(data.getDate());
                ImageLoader.getInstance().displayImage(data.getThumbnail_pic_s(), viewHolder.img1);
                break;
            case TYPE_TWO:
                //给第二种条目的控件赋值
                viewHolder.title2.setText(data.getTitle());
                viewHolder.date2.setText(data.getDate());
                ImageLoader.getInstance().displayImage(data.getThumbnail_pic_s(), viewHolder.img2_1);
                ImageLoader.getInstance().displayImage(data.getThumbnail_pic_s(), viewHolder.img2_2);
                ImageLoader.getInstance().displayImage(data.getThumbnail_pic_s(), viewHolder.img2_3);
                break;
        }
        return convertView;
    }

    class ViewHolder {
        TextView title1, date1;
        ImageView img1;
        TextView title2, date2;
        ImageView img2_1, img2_2, img2_3;
    }

}

 第一种类型的布局:

<?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="match_parent">

    <ImageView
        android:id="@+id/img1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentRight="true"
        android:src="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/title1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@id/img1"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@id/img1"
        android:text="哈哈哈"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/date1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/img1"
        android:layout_alignParentLeft="true"
        android:layout_marginRight="20dp"
        android:text="哈哈哈"
        android:textColor="#beba96" />
</RelativeLayout>

第二种类型的布局:

<?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="match_parent">

    <TextView
        android:id="@+id/title2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="哈哈哈"
        android:textSize="20sp" />

    <LinearLayout
        android:id="@+id/l"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/title2"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/img2_1"
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:layout_margin="0dp"
            android:layout_weight="1"
            android:src="@mipmap/ic_launcher" />

        <ImageView
            android:id="@+id/img2_2"
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:layout_margin="0dp"
            android:layout_weight="1"
            android:src="@mipmap/ic_launcher" />

        <ImageView
            android:id="@+id/img2_3"
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:layout_margin="0dp"
            android:layout_weight="1"
            android:src="@mipmap/ic_launcher" />

    </LinearLayout>

    <TextView
        android:id="@+id/date2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/l"
        android:text="哈哈哈"
        android:textColor="#beba96" />
</RelativeLayout>

猜你喜欢

转载自blog.csdn.net/weixin_43917449/article/details/85798278