您的位置:首页 > 其它

解决listview显示全部数据和隐藏部分数据时候postion错乱

2017-07-06 11:14 417 查看
 

只复用我们的布局,而不复用我们子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;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐