android android 在list view中插入一条广告

当看到这个需求的时候,我是懵逼的,怎么在list view中插入一条广告的数据,如果说给list view添加一个头视图或者是尾视图,这都不是问题,在list view中间添加一个数据,我最开始的思路是,给最下面的list view添加两个头视图,一个是list view,另一个是广告,当运行的时候,发现这种做法并不可行,那就一定会有办法解决的。
于是我们换个思路,两个不同的数据,也就是说就是两种不同的ItemViewType,或许我们可以通过判断type的方式来完成这个功能:

1.首先来写布局文件,很简单,就是一个list view

<?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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.administrator.otherviewinlistview.MainActivity">

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</RelativeLayout>

2.再来看数据实体类:


import java.util.List;

/**
 * Created by Administrator on 2017/3/22.
 */

public class Bean {

    private List<Data> dataList;
    private int num;

    public Bean(int num, List<Data> dataList) {
        this.num = num;
        this.dataList = dataList;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public List<Data> getDataList() {
        return dataList;
    }

    public void setDataList(List<Data> dataList) {
        this.dataList = dataList;
    }

    public static class Data {
        private String title;
        private String body;

        public Data(String title, String body) {
            this.title = title;
            this.body = body;
        }

        public Data() {
        }

        public String getTitle() {
            return title;
        }

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

        public String getBody() {
            return body;
        }

        public void setBody(String body) {
            this.body = body;
        }
    }

}

3.然后在MainActivity中使用:


import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private ListView listView;
    private MainAdapter mainAdapter;
    private Bean bean;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView) findViewById(R.id.listView);
        mainAdapter = new MainAdapter(this);

        List<Bean.Data> list = new ArrayList<>();
        for (int i = 0; i < 30; i++) {
            Bean.Data data = new Bean.Data("this is title " + i, "this is body " );
            list.add(data);
        }

        for (int i = 0; i < 30; i++) {
            bean = new Bean(i, list);
        }

        mainAdapter.setBean(bean);
        listView.setAdapter(mainAdapter);
    }
}

4.最重要的是在adapter中做处理:


public class MainAdapter extends BaseAdapter {

    private Context context;
    private Bean bean;
    private ArrayList list = new ArrayList();

    public MainAdapter(Context context) {
        this.context = context;
    }

    public void setBean(Bean bean) {
        this.bean = bean;
        mergeList();
        notifyDataSetChanged();
    }

    private void mergeList() {
        //清空
        list.clear();
        for (int i = 0; i < bean.getDataList().size(); i++) {
            Bean.Data title = bean.getDataList().get(i);
            //添加数据
            list.add(title);
            if (i % 10 == 0 && i != 0){
                //每当大于10的时候,向集合中添加一个别的类型数据
                list.add(bean.getNum());
            }
        }
    }

    //获取item的类型
    @Override
    public int getItemViewType(int position) {
        return list.get(position) instanceof Bean.Data ? 0 : 1;
    }

    //获取有多少view type
    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public int getCount() {
        return list.size();
    }

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

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder viewHolder = null;
        ViewHolderTwo viewHolderTwo = null;
        int type = getItemViewType(position);
        if (type == 0) {
            if (convertView == null) {
                convertView = LayoutInflater.from(context).inflate(R.layout.item_view, parent, false);
                viewHolder = new ViewHolder(convertView);
                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }
            //设置数据
            Bean.Data data = (Bean.Data) list.get(position);
            viewHolder.titleTv.setText(data.getTitle());
            viewHolder.bodyTv.setText(data.getBody());

        } else if (type == 1) {
            if (convertView == null) {
                convertView = LayoutInflater.from(context).inflate(R.layout.item_view_two, parent, false);
                viewHolderTwo = new ViewHolderTwo(convertView);
                convertView.setTag(viewHolderTwo);
            } else {
                viewHolderTwo = (ViewHolderTwo) convertView.getTag();
            }
            //设置数据

        }

        return convertView;
    }

    class ViewHolder {

        public TextView titleTv, bodyTv;

        public ViewHolder(View itemView) {

            titleTv = (TextView) itemView.findViewById(R.id.title);
            bodyTv = (TextView) itemView.findViewById(R.id.body);
        }
    }

    class ViewHolderTwo {

        public ImageView headIv;

        public ViewHolderTwo(View itemView) {
            headIv = (ImageView) itemView.findViewById(R.id.item_view_two_iv);
        }
    }
}

5.item_view的布局:

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

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="2dp"
        android:text="标题"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/body"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="200dp"
        android:layout_marginTop="2dp"
        android:layout_marginBottom="2dp"
        android:text="内容"
        android:textSize="17sp"
        android:textColor="@color/colorPrimaryDark"/>

</LinearLayout>

6.item_view_two的布局:

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

    <ImageView
        android:id="@+id/item_view_two_iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/headiv"
        android:scaleType="fitXY"/>

</LinearLayout>

7.效果图如下

这里写图片描述

8.demo下载地址:

http://download.csdn.net/detail/afanbaby/9790221

本人菜鸟一个,有什么不对的地方希望大家指出评论,大神勿喷,希望大家一起学习进步!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值