友
我遇到了可扩展列表的问题 - 这是第一次正确绘制列表组,(相应的textViews文本被替换,例如 3 of 9 )但是当点击任何组时替换另一组(随机)的textViews而不是未接触的 mm 。
应该采取什么措施来阻止这种情况?
这是适配器类:
public class InterestListAdapter extends BaseExpandableListAdapter
{
...
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
{
if (convertView == null)
{
convertView = LayoutInflater.from(_context).inflate(R.layout.activity_interest_list_group, parent, false);
}
try
{
HashMap<String, String> interest = this._listDataHeader.get(String.valueOf(groupPosition));
String interestId = interest.get("interest_id");
String interestName = interest.get("interest_name");
JSONObject interestsTree = new JSONObject(library.loadString(_context, "userInterestsTree"));
TextView listGroupName = (TextView) convertView.findViewById(R.id.interest_list_group_name);
listGroupName.setText(interestName);
if (this._listDataChild.containsKey(String.valueOf(interestId)))
{
String subinterestAll = String.valueOf(this._listDataChild.get(String.valueOf(interestId)).size());
if (interestsTree.has(interestId))
{
String subinterestChecked = interestsTree.getString(interestId);
TextView subinterestText = (TextView) convertView.findViewById(R.id.interest_list_group_selected);
subinterestText.setText(subinterestChecked + " of " + subinterestAll);
}
}
}
catch (Exception e)
{
Log.e("error", Log.getStackTraceString(e));
}
return convertView;
}
}
答案 0 :(得分:1)
我很确定,你的内存管理存在问题。当您展开列表时,某些单元格将从屏幕隐藏。之后,当您滚动它时,它们必须重新生成。 Android OS,为了节省内存,不会从头开始生成它们,而是使用相同的内存区域,用于隐藏单元格。
看起来subinterestText是一个有问题的领域。只有当这两个if都为真时才设置它:
if (this._listDataChild.containsKey(String.valueOf(interestId)))
和
if (interestsTree.has(interestId))
如果其中一个为假,则不会设置subinterestText变量。因此,结果将使用以前隐藏字段的值 - 在您的情况下 - 2的2。
要修复它 - 始终在getGroupView方法中设置单元格的所有值。