listview加载不同条目

public class NewsAdapter extends BaseAdapter {
Context context;
List<NewsDataBean.DataBean> list;
private final int TYPE_VIDEO = 0;
private final int TYPE_IMAGE_THREEE = 1;
private final int TYPE_IMAGE_ONE = 2;
private final int TYPE_NORMAL = 3;

public NewsAdapter(Context context, List<NewsDataBean.DataBean> list) {
this.context= context;
this.list = list;
}

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

@Override
public Object getItem(int i) {
return list.get(i);
}

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

/**
* 获取视图类型的数量...也就是有多少种条目类型
*
* @return
*/
@Override
public int getViewTypeCount() {
return 4;
}

/**
* 返回当前位置条目视图的类型....返回值是int值
*
* @param position ...当前位置
* @return
*/
@Override
public int getItemViewType(int position) {
//根据数据中的内容进行判断,...当前位置显示的是什么内容
if (list.get(position).isHas_video()){
//当前的条目时视频

return TYPE_VIDEO;
}else if (list.get(position).isHas_image()){
if (list.get(position).getImage_list().size()>=3){
//三张图片的样式
return TYPE_IMAGE_THREEE;
}else {
return TYPE_IMAGE_ONE;
}
}

//否则就是普通的条目
return TYPE_NORMAL;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
//在写之前先判断一下当前属于哪种条目的类型
if (getItemViewType(i) == TYPE_VIDEO){
VideoHolder holder;
if (view == null){
view = View.inflate(context,R.layout.item_video,null);
holder = new VideoHolder();

holder.text_title = view.findViewById(R.id.text_title);
//holder

view.setTag(holder);
}else {
holder = (VideoHolder) view.getTag();
}

holder.text_title.setText(list.get(i).getTitle());
//...图片采用默认

}else if (getItemViewType(i) == TYPE_IMAGE_THREEE){
ImageThreeHolder holder;
if (view == null){
view = View.inflate(context,R.layout.item_three_image,null);
holder = new ImageThreeHolder();

holder.text_title = view.findViewById(R.id.text_title);

view.setTag(holder);

}else {
holder = (ImageThreeHolder) view.getTag();
}

holder.text_title.setText(list.get(i).getTitle());

}else if (getItemViewType(i) == TYPE_IMAGE_ONE){//一张图片的条目
ImageOneHolder holder;
if (view == null){
view = View.inflate(context,R.layout.item_image_one,null);
holder = new ImageOneHolder();

holder.text_title = view.findViewById(R.id.text_title);

view.setTag(holder);

}else {
holder = (ImageOneHolder) view.getTag();
}

holder.text_title.setText(list.get(i).getTitle());
}else {
//显示的是普通的条目
NormalHolder holder;
if (view == null){
view = View.inflate(context,R.layout.item_normal,null);
holder = new NormalHolder();

holder.text_title = view.findViewById(R.id.text_title);

view.setTag(holder);

}else {
holder = (NormalHolder) view.getTag();
}

holder.text_title.setText(list.get(i).getTitle());
}

return view;
}
//视频的
private class VideoHolder{
TextView text_title;
ImageView imageView;
}

private class ImageThreeHolder{
TextView text_title;
ImageView image_01;
ImageView image_02;
ImageView image_03;
}

private class ImageOneHolder{
TextView text_title;
ImageView imageView;
}

private class NormalHolder{
TextView text_title;
}

}

时间: 2024-10-25 00:14:09

listview加载不同条目的相关文章

一步一步实现listview加载的性能优化

listview加载的核心是其adapter,本文针对listview加载的性能优化就是对adpter的优化,总共分四个层次: 0.最原始的加载 1.利用convertView 2.利用ViewHolder 3.实现局部刷新 [转载请保留本文地址:http://www.cnblogs.com/goagent/p/5158064.html]  〇.最原始的加载 这里是不经任何优化的adapter,为了看起来方便,把listview的数据直接在构造函数里传给adapter了,代码如下: 1 priv

Android ListView加载更多

先看效果: ListView的footer布局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap

listView加载在Dialog里面

LinearLayout linearLayoutMain = new LinearLayout(this);// 自定义一个布局文件 linearLayoutMain.setLayoutParams(new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); ListView listView = new ListView(this); listView.setFadingEdgeLength(0); Li

listview加载性能优化

在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建. ListView加载数据都是在public View getView(int position, View convertView, ViewGroup parent) {}方法中进行的(要自定义listview都需

Android listview 加载更多定位问题

我们用Android在做Listview加载更多数据时,如果每次都重新new Adapter的话,视图就会滑动到第一条. 后来我发现listview有一个方法可以获取最顶部时哪一个 int  position = mListView.getFirstVisiblePosition(); 这样就可以获取目前显示的第一行到底是多少条. 于是我有找到一个方法,加载更多数据后.我们设置一下他的选取位置,就不会有滚动到第一个条了 mListView.setSelection(position); 但是仔细

Listview 加载更多

JQM Listview 加载更多 demo - Warren的个人主页 JQM Listview 加载更多 Demo 测试数据1 测试数据2 测试数据3 测试数据4 显示更多 Page Footer <!DOCTYPE HTML> <html> <head> <title>JQM Listview 加载更多 demo - Warren的个人主页</title> <meta name="keywords" content

listview加载性能优化ViewHolder

在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局, 但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建. ListView加载数据都是在public View getView(int position, View convertView, ViewGroup parent) {}方法中进行的(要自定义listview都

【Android笔记】listview加载性能优化及有多种listitem布局处理方式

在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容. 用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建. ListView加载数据都是在 1 public View getView(int position, View convertView, ViewGroup parent) { 2 3 ...... 4 5 }

Android错误之ListView加载错位_ListView图片错位

又遇到ListView加载item时,多个item中的图片会错位的情况 现象如下图,同一个人的头像显示的乱七八糟 找了一张图,很好地说明了问题的原因 问题原因就在于convertView的重用,当重用 convertView 时,最初一屏显示 7 条记录, getView 被调用 7 次,创建了 7 个 convertView, 当 Item1 划出屏幕, Item8 进入屏幕时,这时没有为 Item8 创建新的 view 实例, Item8 复用的是Item1时候创建的view, Item8