解决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; } }
相关文章推荐
- 一个列用render渲染的时候,如果列宽度不够,内容多出的部分会被隐藏,无法显示。这时需要一个鼠标滑过提示全部内容的tip功能。
- listview的某个item点击显示或隐藏的错乱问题解决方法
- ListView获取只显示在屏幕的部分数据与全部数据
- Android ListView滑动过程中图片显示重复错乱闪烁问题解决
- Android ListView滑动过程中图片显示重复错乱闪烁问题解决
- Android ListView滑动过程中图片显示重复错乱闪烁问题解决
- Android ListView滑动过程中图片显示重复错乱闪烁问题解决
- 第二部分基本组件---2.1SQLite部分应用-自定义database中取出数据,listView做界面显示示例
- 解决ListView上多选和单选界面上显示错乱的问题
- Android ListView滑动过程中图片显示重复错乱闪烁问题解决
- Android ListView数据绑定显示的三种解决方法
- 建站或者网站搬家换空间的时候,企业站长最关心的一个问题是该如何选择网站空间,而这一问题对于一些擅长的站长来说非常小意思,但对于部分企业站长来说是一个比较头疼的问题。根据不完整数据显示,很多企业站长因为
- jquery 实现超出部分隐藏,鼠标移动上显示全部文字
- listview空数据的时候显示。
- ListView滑动过程中图片显示重复错乱闪烁问题解决
- jquery 实现超出部分隐藏,鼠标移动上显示全部文字 .
- 汉字乱码问题解决:添加数据的时候,添加汉字,添加成功了,但是显示乱码
- jquery 实现超出部分隐藏,鼠标移动上显示全部文字
- Android ListView滑动过程中图片显示重复错乱闪烁问题解决