当看到这个需求的时候,我是懵逼的,怎么在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 dataList;    private int num;    public Bean(int num, List dataList) {        this.num = num;        this.dataList = dataList;    }    public int getNum() {        return num;    }    public void setNum(int num) {        this.num = num;    }    public List getDataList() {        return dataList;    }    public void setDataList(List 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 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

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

更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. 跟Google学习Android开发-起始篇-保存数据(2)
  3. 分享这近做的一款android软件-"妞妞驾考"
  4. android MVP + dagger2 + Retrofit + Rxjava+okhttp android基础
  5. Android2018年最新前沿框架和技术
  6. Android(安卓)Studio官方文档之使用布局编辑器来设计UI界面
  7. Android(安卓)引导页动态添加圆点指示器
  8. android 上面一个listview下面一个button,让button一直处于listv
  9. Android5.0 下拉通知栏快捷开关的添加(必看)

随机推荐

  1. 组合索引,下他哪些说法符合《阿里巴巴Java
  2. Linux之rz和sz命令用法详解
  3. 各学术职业需具备的知识, 技能和软件技术
  4. 终于有人把自然语言处理、机器学习、深度
  5. ARCH及其扩展模型的操作步骤, 程序和各种
  6. *中国县域统计年鉴, 人口与就业统计年鉴1
  7. 人工智能自拍之后,会怎样给自己P图?
  8. ARIMA时间序列模型的步骤, 程序和各种检
  9. 添加一个新变量能使以前不显著的变量变得
  10. 线索二叉树(C语言)