我有一個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