簡體   English   中英

在getView上的自定義適配器內以編程方式添加textviews

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM