android android 在list view中插入一条广告
16lz
2021-01-26
当看到这个需求的时候,我是懵逼的,怎么在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
本人菜鸟一个,有什么不对的地方希望大家指出评论,大神勿喷,希望大家一起学习进步!
更多相关文章
- 一句话锁定MySQL数据占用元凶
- 跟Google学习Android开发-起始篇-保存数据(2)
- 分享这近做的一款android软件-"妞妞驾考"
- android MVP + dagger2 + Retrofit + Rxjava+okhttp android基础
- Android2018年最新前沿框架和技术
- Android(安卓)Studio官方文档之使用布局编辑器来设计UI界面
- Android(安卓)引导页动态添加圆点指示器
- android 上面一个listview下面一个button,让button一直处于listv
- Android5.0 下拉通知栏快捷开关的添加(必看)