[英]Programatically add textviews within a Custom Adapter on getView
想知道是否有人可以幫助我,或者只是知道是否可以做到。 我有一個用於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語句中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.