屏幕适配-ListView-GridView上滑动后数据错乱、数据混乱
/////////////////////////////////////////////////////////////////////////////////
另外 setTag
getTag
http://blog.csdn.net/zhufui/article/details/46907027
另外在ImageView中加载url图片时,也需要判断一下,防止错位
不含有图片时:
mHolder.edittext.setTag(position);// 粗暴的使用position也行
//逻辑操作中
if ((Integer) mHolder.edPrdRectify.getTag() == position) {
//某一个editText失去焦点会导致所有的item都执行一遍这
//里的代码,且position的值是当前值,所以,所有list中item数据都修改
listOfPendingRectifyInfos.get(position).setRectifiReplySituation(arg0.toString());
//业务处理
}
/////////////////////////////////////////////////////////////////////////////////
对于不同判断条件设置不同的文字颜色或背景这一类问题时
滚动出现颜色错位,但是数据正确,这说明仅仅是控件颜色没有正常渲染,没有写else。
if(A){
setColor(a);
}else{//关键
setColor(b);
}
////////////////////////////////////////////////////////////////////////////////
含有分页加载时:
holder.checkbox
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// 这里可能还需要设置list中的对应position的checkbox为isChecked,否则只能在刷新后才能取出数据
if (getSelectedCount() - alreadyChoosedList.size() >= maxCount) {
holder.checkbox.setChecked(false);// 跟这个有关系么
return;
}
if (isChecked) {
viewDatas.get(position).setSaveCheckStatus(1);//单独用一个字段保证checkbox的状态
// 重要!!
} else {
viewDatas.get(position).setSaveCheckStatus(0);//单独用一个字段保证checkbox的状态
}
}
});
if (/* isFirstIn && 这里就不能在要了,会有问题 */alreadyChoosedList != null
&& alreadyChoosedList.contains(viewDatas.get(position).path)) {// 应该是这里出的错
if (viewDatas.get(position).isHasInited == false) {
/**
* isHasInited 只针对分页加载时
* 禁止页面刷新后又自动初始化之前默认选中的值,isFirstIn只能控制无分页加载的情况
*/
holder.checkbox.setChecked(true);
viewDatas.get(position).setChecked(true);
viewDatas.get(position).setSaveCheckStatus(1);// 保存状态 重要!!
viewDatas.get(position).setHasInited(true); // 下次不再执行
}
}
if (viewDatas.get(position).getSaveCheckStatus() == 0) {// 显示状态 重要!!
holder.checkbox.setChecked(false);
viewDatas.get(position).setChecked(false);
} else {
holder.checkbox.setChecked(true);
viewDatas.get(position).setChecked(true);
}
if (position == viewDatas.size() - 4) {// 提前加载
/**
* isHasInited 只针对分页加载时 禁止页面刷新后又自动初始化之前默认选中的值,isFirstIn只能控制无分页加载的情况
*/
isFirstIn = false;
if (mLoadMoreCallBack != null) {
mLoadMoreCallBack.loadMore();
}
}
/////////////////////////////////////////////////////////////////////////////////
mViewHolder.amaiCheckBox
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
/**
* 这里需要设置list中的对应position的checkbox为isChecked,
* 否则只能在刷新后才能取出数据
*/
taskMembers.get(position).setCheck(isChecked);
if (isChecked) {
taskMembers.get(position).setSaveCheckStatus(1);//单独用一个字段保证checkbox的状态
;// 状态一定要保存起来
} else {
taskMembers.get(position).setSaveCheckStatus(0);//单独用一个字段保证checkbox的状态
// 状态一定要保存起来
}
}
});
// mViewHolder.amaiCheckBox
// .setChecked(taskMembers.get(position).isCheck()); //不需要写
Logs.d("test", "滚动 position " + position);
if (isFirstIn == true
&& taskMembers.get(position).getUserNumber()
.equals(Global.getUser().getUserNumber())) {//第一次初始化View时
Logs.d("test", "滚动 等于自己时 position " + position);
if (taskMembers.get(position).isHasInited() == false) {
/**
* isHasInited 主要是针对分页加载
*/
mViewHolder.amaiCheckBox.setChecked(true);
mViewHolder.amaiCheckBox.setClickable(false);
mViewHolder.amaiCheckBox.setEnabled(false);
taskMembers.get(position).setCheck(true);
taskMembers.get(position).setSaveCheckStatus(1);// 保存状态 重要!!
taskMembers.get(position).setHasInited(true); // 下次不再执行
mViewHolder.amaiCheckBox.setTag(position);
}
}
/**
* 对于 setChecked setEnabled setClickable 这几个方法 必须要set相反的属性进去!!!
*/
if (taskMembers.get(position).getSaveCheckStatus() == 0) {// 显示状态 重要!!
mViewHolder.amaiCheckBox.setChecked(false);
mViewHolder.amaiCheckBox.setEnabled(true);
mViewHolder.amaiCheckBox.setClickable(true);// 必须
taskMembers.get(position).setCheck(false);
} else {
if (taskMembers.get(position).getUserNumber()
.equals(Global.getUser().getUserNumber())) {//某一个固定值
Logs.d("test", "滚动 等于自己时2 position " + position);
mViewHolder.amaiCheckBox.setChecked(true);
mViewHolder.amaiCheckBox.setClickable(false);// 必须
mViewHolder.amaiCheckBox.setEnabled(false);
} else {
mViewHolder.amaiCheckBox.setChecked(true);
mViewHolder.amaiCheckBox.setEnabled(true);
mViewHolder.amaiCheckBox.setClickable(true);// 必须
taskMembers.get(position).setCheck(true);
}
}
mViewHolder.amaiName.setText(taskMembers.get(position).getMansName());
mViewHolder.amaiPhoneNumber.setText(taskMembers.get(position)
.getManPhoneNum());
if (position == taskMembers.size() - 1) {
isFirstIn = false;
}
正文到此结束