在重写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;
}
}