只复用我们的布局,而不复用我们子view的相关属性,比如子view的postion等,不然就会重新计量或者数据错乱等现象,用的时候就取,下面是自己的demo问题 ,红色的部分是改完之后postion不会出现错乱现象了
package com.shendi.View.adapter; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.shendi.Model.bean.CapteInfosInitBean; import com.shendi.Model.bean.eventbusbean.CarListAdapterBean; import com.shendi.R; import com.shendi.Utils.NetUtils; import com.shendi.View.activity.ScaleTypeImageViewActivity; import com.shendi.View.application.MyApplication; import com.shendi.View.application.UIHelper; import org.greenrobot.eventbus.EventBus; import java.util.ArrayList; import java.util.Map; /** * Created by zhq_zhao on 2017/4/10. */ public class CarListAdapter extends BaseAdapter implements View.OnClickListener{ private ArrayList<CapteInfosInitBean.DetailBean.CaravanTypesBean> arrayList; private View mLastView; private int mLastPosition; private int mLastVisibility; private int mBtLastVisibility= View.VISIBLE; public int count=3; private Holder holder; public CarListAdapter(ArrayList<CapteInfosInitBean.DetailBean.CaravanTypesBean> arrayList) { this.arrayList = arrayList; mLastPosition = -1; } @Override public int getCount() { return count; } @Override public Object getItem(int position) { return arrayList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // android:text="¥100" holder = null; if (convertView == null) { convertView = View.inflate(MyApplication.context, R.layout.layout_caption_car_info, null); holder = new Holder(); holder.hint = (LinearLayout) convertView.findViewById(R.id.ll_hide_view); holder.ll_hide_child_view = (LinearLayout) convertView.findViewById(R.id.ll_hide_child_view); holder.iv_car_info = (ImageView) convertView.findViewById(R.id.iv_car_info); holder.tv_car1 = (TextView) convertView.findViewById(R.id.tv_car1); holder.tv_member_no_price = (TextView) convertView.findViewById(R.id.tv_member_no_price); holder.tv_member_price = (TextView) convertView.findViewById(R.id.tv_member_price); holder.tv_car2 = (TextView) convertView.findViewById(R.id.tv_car2); holder.tv_price = (TextView) convertView.findViewById(R.id.tv_price); holder.tv_descri = (TextView) convertView.findViewById(R.id.tv_descri); holder.tv_descri2 = (TextView) convertView.findViewById(R.id.tv_descri2); holder.tv_huiyuan = (TextView) convertView.findViewById(R.id.tv_huiyuan); holder.tv_no_huiyuan = (TextView) convertView.findViewById(R.id.tv_no_huiyuan); holder.tv_price = (TextView) convertView.findViewById(R.id.tv_price); holder.bt_login = (Button) convertView.findViewById(R.id.bt_login); holder.bt_login2 = (Button) convertView.findViewById(R.id.bt_login2); holder.bt_login2.setOnClickListener(this); holder.bt_login.setOnClickListener(this); holder.bt_login.setVisibility(mBtLastVisibility); convertView.setTag(holder); } else { holder = (Holder) convertView.getTag(); } holder.iv_car_info.setOnClickListener(supportListener); holder.iv_car_info.setTag(position); //默认肯定不相等 if (mLastPosition == position) { holder.hint.setVisibility(mLastVisibility); } else {//首先就是隐藏,执行这个代码 holder.hint.setVisibility(View.GONE); } //这里设置数据 holder.tv_car1.setText(arrayList.get(position).getName()); holder.tv_car2.setText(arrayList.get(position).getBedName()+" "+arrayList.get(position).getArea()+"m2"); holder.tv_price.setText("¥"+arrayList.get(position).getLowestPrice()+"起"); NetUtils.getmInstance().showImageViewXUtils( holder.iv_car_info,arrayList.get(position).getPictures().get(0).getPictureUrl(),R.drawable.ic_launcher, R.drawable.ic_launcher); //判断集合中是否有两个元素 if(arrayList.get(position).getCaravans().size()==1){//集合大小为一 //隐藏下面的一个小的item holder.ll_hide_child_view.setVisibility(View.GONE); //设置下面会员价格的数据 holder.tv_member_price.setText(arrayList.get(position).getCaravans().get(0).getSpecialPrice().toString());//会员价格 //设置是否会员名称 holder.tv_huiyuan.setText(arrayList.get(position).getCaravans().get(0).getName().toString()); //设置会员价格描述内容 holder.tv_descri.setText(arrayList.get(position).getCaravans().get(0).getBreakfirst()+" "+arrayList.get(position).getCaravans().get(0).getBedName()); }else{ //隐藏下面的一个小的item holder.ll_hide_child_view.setVisibility(View.VISIBLE); holder.tv_member_price.setText(arrayList.get(position).getCaravans().get(0).getSpecialPrice().toString());//会员价格 holder.tv_member_no_price.setText(arrayList.get(position).getCaravans().get(1).getPrice().toString());//非价格 holder.tv_huiyuan.setText(arrayList.get(position).getCaravans().get(0).getName().toString()); holder.tv_no_huiyuan.setText(arrayList.get(position).getCaravans().get(1).getName().toString()); //设置会员价格描述内容 holder.tv_descri.setText(arrayList.get(position).getCaravans().get(0).getBreakfirst()+" "+arrayList.get(position).getCaravans().get(0).getBedName()); holder.tv_descri2.setText(arrayList.get(position).getCaravans().get(1).getBreakfirst()+" "+arrayList.get(position).getCaravans().get(1).getBedName()); } return convertView; } /** * 点击图片把当前的postion传递给下一个缩略图的activity */ private View.OnClickListener supportListener = new View.OnClickListener() { @Override public void onClick(View v) { final int chosenPosition = (Integer) v.getTag(); Log.i("asfdsafasf", "onClick: "+chosenPosition); //跳转到缩略图进行操作 UIHelper.GoFlag(MyApplication.context, ScaleTypeImageViewActivity.class); EventBus.getDefault().postSticky(new CarListAdapterBean() { @Override public Map ValuesMap() { return null; } @Override public String ValuesString() { return null; } @Override public ArrayList<CapteInfosInitBean.DetailBean.CaravanTypesBean.PicturesBean> ValuesArrayList() { ArrayList<CapteInfosInitBean.DetailBean.CaravanTypesBean.PicturesBean> pictures = (ArrayList<CapteInfosInitBean.DetailBean.CaravanTypesBean.PicturesBean>) arrayList.get(chosenPosition).getPictures(); return pictures; } @Override public Object ValuesObject() { return null; } }); } }; /** * 显示隐藏item下面的条目 * * @param view * @param position */ public void changeImageVisable(View view, int position) { if (mLastView != null && mLastPosition != position) { Holder holder = (Holder) mLastView.getTag(); switch (holder.hint.getVisibility()) { case View.VISIBLE: holder.hint.setVisibility(View.GONE); mLastVisibility = View.GONE; break; default: break; } } mLastPosition = position; mLastView = view; Holder holder = (Holder) view.getTag(); switch (holder.hint.getVisibility()) { case View.GONE: holder.hint.setVisibility(View.VISIBLE); mLastVisibility = View.VISIBLE; break; case View.VISIBLE: holder.hint.setVisibility(View.GONE); mLastVisibility = View.GONE; break; } } @Override public void onClick(View v) { switch (v.getId()){ case R.id.bt_login: Toast.makeText(MyApplication.context,"跳转登录成功",Toast.LENGTH_LONG).show(); break; case R.id.bt_login2: Toast.makeText(MyApplication.context,"跳转登录成功",Toast.LENGTH_LONG).show(); break; default: break; } } class Holder { TextView tv_car1; TextView tv_descri; TextView tv_descri2; TextView tv_huiyuan; TextView tv_no_huiyuan; TextView tv_member_price; TextView tv_member_no_price; TextView tv_price; TextView tv_car2; LinearLayout hint; LinearLayout ll_hide_child_view; ImageView iv_car_info; Button bt_login; Button bt_login2; } }