我有一个ExpandableListView,根据它们在组中的位置更改它的项目。下面的代码在第一次绘制ListView时工作,但是当它重绘类似滚动的东西时,会使childPosition值发生更改。例如,如果我滚动到列表底部(隐藏第一个孩子)并向上滚动到顶部,getChildView将会将顶部视图作为最后一个孩子进行处理。不一致的ExpandableListView位置
说实话,位置值与屏幕上实际显示的内容非常不一致。这是Android中的错误还是我在这里错过了一些东西?
作为一个补充说明,当我将数据添加到这个ExpandableListView并根据groupPosition和childPosition值填充视图(使用相同的功能),该数据是正确的......
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) get_context().getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(rowFormatID, parent, false);
}
if(get_elementList().get(groupPosition).size()-1 == childPosition){
View divider = v.findViewById(R.id.divider);
divider.setVisibility(View.GONE);
}
if (get_elementList().get(groupPosition).size() == 1)
v.setBackgroundResource(R.drawable.layer_card_background_white);
else {
if(childPosition == 0)
v.setBackgroundResource(R.drawable.layer_card_background_white_top);
else if(get_elementList().get(groupPosition).size()-1 == childPosition)
v.setBackgroundResource(R.drawable.layer_card_background_white_bottom);
}
return v;
}
编辑:下面是修复问题的调整代码
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) get_context().getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(rowFormatID, parent, false);
}
View divider = v.findViewById(R.id.divider);
if(get_elementList().get(groupPosition).size()-1 == childPosition)
divider.setVisibility(View.GONE);
else //added this else
divider.setVisibility(View.VISIBLE);
if (get_elementList().get(groupPosition).size() == 1)
v.setBackgroundResource(R.drawable.layer_card_background_white);
else {
if(childPosition == 0)
v.setBackgroundResource(R.drawable.layer_card_background_white_top);
else if(get_elementList().get(groupPosition).size()-1 == childPosition)
v.setBackgroundResource(R.drawable.layer_card_background_white_bottom);
else //also added this else
v.setBackgroundColor(Color.WHITE);
}
return v;
}
我不确定你的意思。列表的大小永远不会改变(在这种情况下不会),所以它应该始终是静态的。我需要完全初始化什么? – c0deblooded 2014-10-08 12:35:15
@ c0d3blooded例如在第二个if后写'else {divider.setVisibility(View.VISIBLE);}'。在最后一个嵌套的'if':'else v.setBackgroundResource(R.drawable.whatever_default_background_you_have);'之后。 – 2014-10-08 13:10:51
这些额外的检查有点奇怪,但这样做保持了一致的LivstView。谢谢一堆!我已经用调整后的代码更新了我的答案。 – c0deblooded 2014-10-08 17:28:37