今天遇到一个问题,在listviev中加入传进来的布局,上下滑动时,报错The specified child already has a parent。
先贴原始代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = layoutInflater.inflate(R.layout.check_laizi_item_ll, null);
RelativeLayout mRelativeLayout = (RelativeLayout) convertView.findViewById(R.id.clil_rl);
List<Poker> poker = mPokers.get(position);
for (int j = 0; j < poker.size(); j++) {
Poker card = poker.get(j);
if (card.isLaiZi()) {
card.getPokeImage().setImageDrawable(ImageUtil.getResDrawable(card.getBitpamResLaiZiID(), true));
} else {
card.getPokeImage().setImageDrawable(ImageUtil.getResDrawable(card.getBitpamResID(), true));
}
card.setId(position + 100);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(mst.adjustXIgnoreDensity(45), mst.adjustYIgnoreDensity(61));
params.topMargin = mst.adjustYIgnoreDensity(card_jiange);
params.leftMargin = mst.adjustXIgnoreDensity(card_jiange * j);
card.getInnerLayout().setBackgroundDrawable(ImageUtil.getResDrawable(R.drawable.poker_div, true));
card.getInnerLayout().setVisibility(View.GONE);
card.setClickable(false);
card.setLayoutParams(params);
mRelativeLayout.addView(card);
}
return convertView;
}
再贴图片:
原因是listview中我的Poker控件被多个convertView引用。
之前以为是我的convertView框架被复用的原因,因此我不对convertView进行服用,每次都创建一个convertView,可是也会报这个错误。
我想问题应该在position上,具体神马情况不是我也不好解释,只是感觉position与convertView的变动没有及时同步吧
那我就把convertView用数组保存起来,然后根据position去取,这样是他们同步
再贴修改后代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(null==convertViews[position]){
convertView = layoutInflater.inflate(R.layout.check_laizi_item_ll, null);
RelativeLayout mRelativeLayout = (RelativeLayout) convertView.findViewById(R.id.clil_rl);
List<Poker> poker = mPokers.get(position);
for (int j = 0; j < poker.size(); j++) {
Poker card = poker.get(j);
if (card.isLaiZi()) {
card.getPokeImage().setImageDrawable(ImageUtil.getResDrawable(card.getBitpamResLaiZiID(), true));
} else {
card.getPokeImage().setImageDrawable(ImageUtil.getResDrawable(card.getBitpamResID(), true));
}
card.setId(position + 100);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(mst.adjustXIgnoreDensity(45), mst.adjustYIgnoreDensity(61));
params.topMargin = mst.adjustYIgnoreDensity(card_jiange);
params.leftMargin = mst.adjustXIgnoreDensity(card_jiange * j);
card.getInnerLayout().setBackgroundDrawable(ImageUtil.getResDrawable(R.drawable.poker_div, true));
card.getInnerLayout().setVisibility(View.GONE);
card.setClickable(false);
card.setLayoutParams(params);
mRelativeLayout.addView(card);
convertViews[position]=convertView;
}
}else{
convertView=convertViews[position];
}
Log.i("positionss", "position:"+position+" mPokers.size:"+mPokers.size()+" convertViews[position]:"+convertViews[position]);
return convertView;
}