android开发-Listview中显示不同的视图布局
来源:互联网 发布:把mysql的表放到redis 编辑:程序博客网 时间:2024/05/22 04:28
在重写ListView的BaseAdapter时,我们常常在getView()方法中复用convertView,以提高性能。convertView在Item为单一的同种类型布局时,能够回收并重用,但是多个Item布局类型不同时,convertView的回收和重用会出现问题。比如有些行为纯文本,有些行则是图文混排,这里纯文本行为一类布局,图文混排的行为第二类布局。单一类型的ListView很简单,下面着重介绍一下ListView包含多种类型视图布局的情形
2.ListView包含不同Item的布局
1)重写 getViewTypeCount() – 该方法返回多少个不同的布局
2)重写 getItemViewType(int) – 根据position返回相应的Item 切记返回值 从 0 开始
package adapter;import android.content.Context;import android.content.Intent;import android.os.Handler;import android.os.Message;import android.support.v4.view.ViewPager;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.jht.administrator.relaxtime.R;import com.jht.administrator.relaxtime.SelectActivityTwo;import java.util.ArrayList;import java.util.List;import bean.SelectData;import utils.BitmapUtils;/** * Created by Administrator on 2016/10/9. */public class SelectAdapter extends BaseAdapter { private Context context; private List<SelectData.RecommsBean> recommsBeanList1; private List<ImageView> imgs; private List<View> bannerList; private SelectPageAdapter pageAdapter; private ViewPager viewPager; private int a; private boolean flag = false; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); viewPager.setCurrentItem(viewPager.getCurrentItem() + 1); sendEmptyMessageDelayed(1, 3000); } }; public SelectAdapter(Context context, List<SelectData.RecommsBean> recommsBeanList) { this.context = context; this.recommsBeanList1 = recommsBeanList; Log.i("sss", recommsBeanList1.toString()); } @Override public int getCount() { return recommsBeanList1.size(); } @Override public Object getItem(int i) { return recommsBeanList1.get(i); } @Override public long getItemId(int i) { return i; } @Override public int getViewTypeCount() { return 2; } @Override public int getItemViewType(int position) { if (recommsBeanList1.get(position).getType().equals("Collection")) { //解析数据获得的type,根据不同的type判断需要多少不同的布局,视数据和布局而定 return 0; } else return 1; } @Override public View getView(final int i, View view, ViewGroup viewGroup) { final ViewHolder viewHolder; a = i; if (view == null) {//根据谷歌推荐,先判断view是否为空,在判断对应的item,根据不同的item,加载不同的布局 if (getItemViewType(i) == 1) { viewHolder = new ViewHolder(); view = LayoutInflater.from(context).inflate(R.layout.select_item, viewGroup, false); viewHolder.username = (TextView) view.findViewById(R.id.username); viewHolder.intro = (TextView) view.findViewById(R.id.intro); viewHolder.title = (TextView) view.findViewById(R.id.top_title); viewHolder.sub_title = (TextView) view.findViewById(R.id.sub_title); viewHolder.short_desc = (TextView) view.findViewById(R.id.short_desc); viewHolder.like_count = (TextView) view.findViewById(R.id.like_count); viewHolder.destination = (TextView) view.findViewById(R.id.destination); viewHolder.phonto_url = (ImageView) view.findViewById(R.id.phonto_url); viewHolder.bag_pic = (ImageView) view.findViewById(R.id.bag_pic); view.setTag(viewHolder); } else {//加载viewpager viewHolder = new ViewHolder(); view = LayoutInflater.from(context).inflate(R.layout.select_vp, viewGroup, false); viewHolder.vp = (ViewPager) view.findViewById(R.id.vp); viewHolder.vp_title = (TextView) view.findViewById(R.id.vp_title); viewHolder.VP_sub_title = (TextView) view.findViewById(R.id.vp_sub_title); view.setTag(viewHolder); } } else { viewHolder = (ViewHolder) view.getTag(); } if (getItemViewType(i) == 1) { viewHolder.username.setText(recommsBeanList1.get(i).getReferrer().getUsername()); viewHolder.intro.setText(recommsBeanList1.get(i).getReferrer().getIntro()); viewHolder.title.setText(recommsBeanList1.get(i).getTitle()); viewHolder.sub_title.setText(recommsBeanList1.get(i).getSub_title()); viewHolder.short_desc.setText(recommsBeanList1.get(i).getShort_desc()); viewHolder.like_count.setText(recommsBeanList1.get(i).getLike_count()); viewHolder.destination.setText(recommsBeanList1.get(i).getDestination()); String phono_url = recommsBeanList1.get(i).getReferrer().getPhoto_url(); String bg_url = recommsBeanList1.get(i).getBg_pic().get(0); viewHolder.phonto_url.setTag(phono_url); viewHolder.bag_pic.setTag(bg_url); BitmapUtils.loadImage(phono_url, viewHolder.phonto_url, context, 1); BitmapUtils.loadImage(bg_url, viewHolder.bag_pic, context, 1); } else if (getItemViewType(i) == 0) { // imgs = new ArrayList<ImageView>(); bannerList = new ArrayList<View>(); for (int j = 0; j < recommsBeanList1.get(i).getCollections().size(); j++) { String imgpath = recommsBeanList1.get(i).getCollections().get(j).getBg_pic().get(0); String title = recommsBeanList1.get(i).getCollections().get(j).getTitle(); String subtitle = recommsBeanList1.get(i).getCollections().get(j).getSub_title(); View view1 = LayoutInflater.from(context).inflate(R.layout.item_banner_item, viewGroup, false); TextView tv = (TextView) view1.findViewById(R.id.id_item_banner_tv); TextView tv2 = (TextView) view1.findViewById(R.id.id_item_banner_tv2); ImageView iv = (ImageView) view1.findViewById(R.id.id_item_banner_iv); BitmapUtils.loadImage(imgpath, iv, context, 1); tv.setText(title); tv2.setText(subtitle); final int finalJ = j; view1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Log.i("tag", recommsBeanList1.get(i).getCollections().get(finalJ).getId() + ""); Intent intent = new Intent(context, SelectActivityTwo.class); intent.putExtra("ID", recommsBeanList1.get(i).getCollections().get(finalJ).getId() + ""); intent.putExtra("SHORT_DESC", recommsBeanList1.get(i).getCollections().get(finalJ).getShort_desc()); intent.putExtra("TITLE", recommsBeanList1.get(i).getCollections().get(finalJ).getTitle()); intent.putExtra("BG_PIC", recommsBeanList1.get(i).getCollections().get(finalJ).getBg_pic().get(0)); context.startActivity(intent); } }); bannerList.add(view1); } pageAdapter = new SelectPageAdapter(context, bannerList, recommsBeanList1, i); viewHolder.vp.setAdapter(pageAdapter); viewPager = viewHolder.vp; if (flag == false) { handler.sendEmptyMessageDelayed(1, 3000); flag = true; } } return view; } public class ViewHolder { TextView username, intro, title, sub_title, short_desc, like_count, destination; ImageView phonto_url, bag_pic; TextView vp_title; TextView VP_sub_title; ViewPager vp; }}
0 0
- android开发中Listview中显示不同的视图布局
- Android开发-Listview中显示不同的视图布局
- android开发-Listview中显示不同的视图布局
- android开发-Listview中显示不同的视图布局
- android开发-Listview中显示不同的视图布局
- android开发中Listview中显示不同的视图布局 convertView的复用
- Android Listview中显示不同的视图布局
- Android Listview中显示不同的视图布局
- Listview中显示不同的视图布局
- Listview中显示不同的视图布局
- Listview中显示不同的视图布局
- Listview中显示不同的视图布局
- Listview中显示不同的视图布局
- Listview中显示不同的视图布局
- Listview中显示不同的视图布局
- Listview中显示不同的视图布局
- listview中显示不同的视图布局
- Listview中显示不同的视图布局
- 多类型的RecyclerView
- Android实践 -- apktool 的使用
- sql多条件多字段排序
- CI框架源码解析一之入口文件index.php
- zTree使用实例
- android开发-Listview中显示不同的视图布局
- 吊炸天!74款APP完整源码!
- 将一个数组变成二叉树
- app/system server/service manager等如何访问kernel binder
- 获取http的pdf文件并存到本地转为img
- CentOS7.0上部署kubernetes集群 + 简单应用示例
- php循环语句 for()与foreach()用法区别介绍
- 稀疏编码
- Spring 框架JDBC