想知道是否有人可以帮助我,或者只是知道是否可以做到。我有一个用于ListView的自定义适配器,其中有一些textview始终存在,并与xml布局中的textview相对应,而该XML布局正在被每一行的适配器膨胀。除了这些文本视图之外,我还需要以编程方式为ListView中的每一行添加一些文本视图。每行可能有不同数量的文本视图,需要以编程方式添加。这样做时,每次我上下滚动列表视图时,都会以编程方式添加添加的文本视图,并将它们添加到该行的其他视图中,因此,如果我上下移动几次,则在其中只有一堆重复的文本框每一行。在getView方法中,我具有以下代码来提取动态信息并添加文本框:
Set recordDeailList = item.getRecordDetailList().keySet();
Iterator<String> iterator = recordDeailList.iterator();
while (iterator.hasNext()) {
String key = iterator.next();
String value = item.getRecordDetailList().get(key);
TextView textView = new TextView(RecordsFragment.this.getActivity());
textView.setText(key + ": " + value);
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10.5f);
);
container.addView(textView);
}
感谢您对此进行检查。
由于滚动到屏幕外的容器已被缓存和重用,因此每次调用getView()时,都要向容器中再添加一个textview。
您可以算出容器的子代数,遍历列表并仅添加(如果达到了childCount)
如果尚未达到childcount,则需要计算其余部分(无用的textview),然后调用setVisibility(View.GONE)
这样,您迟早会到达某个点,因为几乎所有容器的子计数都相同,并且不会添加任何新实例
一些示例代码,我现在没有测试:
Set recordDeailList = item.getRecordDetailList().keySet();
Iterator<String> iterator = recordDeailList.iterator();
int i = 0;
int childCount = container.getChildCount();
while (iterator.hasNext()) {
String key = iterator.next();
String value = item.getRecordDetailList().get(key);
TextView textView;
if (i < childCount) {
//reuse existing textview
textView = container.getChildAt(i);
}
else {
// create new TextView and add
textView = new TextView(RecordsFragment.this.getActivity());
container.addView(textView);
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10.5f);
}
textView.setText(key + ": " + value);
i++;
}
while(i < childCount) {
//hide useless children
container.getChildAt(i).setVisibility(View.GONE);
i++
}
编辑:因为您不需要每次都设置文本大小,所以我移动了通话
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10.5f);
在else语句中
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句