100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > android notifydatasetchanged 刷新错误 ListView中使用notifyDataSetChanged()刷新 item显示混乱。...

android notifydatasetchanged 刷新错误 ListView中使用notifyDataSetChanged()刷新 item显示混乱。...

时间:2019-06-29 11:54:56

相关推荐

android notifydatasetchanged 刷新错误 ListView中使用notifyDataSetChanged()刷新 item显示混乱。...

RT,目标是在一个ListView中实现文件夹展开,收起的功能。

基本构想是通过修改list数据,然后刷新画面的方式实现。

展开前:

item0(文件夹,内有子item1,item2)

item3

展开后预想结果:

item0

item1

item2

item3

展开后实际显示效果:(mList的数据已确认是正确的1,2,3,4排列)

item0

item3

item3

item3

补充:点击下边任意一个item3,都会触发最后一个item3的点击事件。似乎是position错位了。

也有可能是convertView缓存更新的问题。

小弟对此不太了解,请各位大师指点。谢谢。

代码如下:

publicclassListAdapterextendsArrayAdapter{

privateLayoutInflaterlayoutInflater;

privateContextmContext;

ListAdaptermAdapter=this;

ArrayListmList;

@Override

publicViewgetView(intposition,ViewconvertView,ViewGroupparent){

ViewHolderholder;

finalintfPosition=position;

if(convertView==null){

convertView=layoutInflater.inflate(R.layout.list_item,null);

holder=newViewHolder(convertView);

convertView.setTag(holder);

}else{

holder=(ViewHolder)convertView.getTag();

}

……

holder.btnForder.setOnClickListener(newView.OnClickListener(){

@Override

publicvoidonClick(Viewv){

//展开/收起文件夹

if(mList.get(fPosition).getShowItemFlg()==0){

mList.get(fPosition).setShowItemFlg(1);

//展开

showForder(fPosition,item);

}else{

mList.get(fPosition).setShowItemFlg(0);

//收起

unshowForder(fPosition,item);

}

for(inti=0;i

Log.d(“$$$$$$$$$$$$”,“mList.get(“+i+”).getName()”+mList.get(i).getName());

}

mAdapter.notifyDataSetChanged();

}

});

……

}

//展开文件夹

privatevoidshowForder(intpositon,ListDatalist){

ArrayListcList=list.getForderItem();

ArrayListfList=newArrayList();

intsize=mList.size();

//保存待展开文件夹之后的item

if(positon+1

for(inti=positon+1;i

fList.add(mList.get(i));

}

//移除待展开文件夹之后的item

for(inti=size–1;i>positon;i–){

Log.d(“%%%%%%%%%%”,“mList.remove(i)=”+mList.get(i).getName());

mList.remove(i);

}

}

//追加待展开文件夹之后的子item

for(inti=0;i

mList.add(cList.get(i));

Log.d(“%%%%%%%%%%”,“cList.get(i).getName()=”+cList.get(i).getName());

}

if(positon+1

//追加保存的待展开文件夹之后的item

for(inti=0;i

mList.add(fList.get(i));

}

}

}

//收起文件夹

privatevoidunshowForder(intpositon,ListDatalist){

ArrayListcList=list.getForderItem();

ArrayListfList=newArrayList();

intsize=mList.size();

//保存待收起文件夹之后的非子item

for(inti=positon+cList.size()+1;i

fList.add(mList.get(i));

}

//移除保存待收起文件夹之后的item

for(inti=size-1;i>positon;i–){

mList.remove(i);

}

//追加待收起文件夹之后的非子item

for(inti=0;i

mList.add(fList.get(i));

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。