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

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

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BACKWASH2038

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值