在getView上的自定义适配器中以编程方式添加textviews

想知道是否有人可以帮助我,或者只是知道是否可以做到。我有一个用于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);

        }

感谢您对此进行检查。

克里斯蒂安·R。

由于滚动到屏幕外的容器已被缓存和重用,因此每次调用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

getview自定义适配器上的nullpointerexception

getView()中的自定义适配器错误

自定义适配器getView中的IndexOutOfBounds异常

自定义适配器的getview中的NullPointerException

自定义适配器 getView 返回空指针

自定义适配器的getView返回错误的位置

ImageView在getView()时崩溃了自定义适配器

如何将两个textViews添加到自定义适配器?

自定义适配器的Textviews不占用屏幕中的指定空间

getView()如何在自定义适配器中工作?

listview项目未在自定义适配器的getview方法中显示分配的值

如果条件在自定义适配器中不起作用(getView())

在调试的自定义适配器中未调用Getview,发现位置返回为-1

从自定义基本适配器> getView上单击按钮,启动对话框片段[包含IMG]

ListView /自定义数组适配器-调用getView时适配器设置为null

自定义适配器上的备用行

在自定义适配器notifyDataSetChanged上获取NullPointerException

无法更新自定义适配器中的项目

自定义ListView适配器中的NullPointerException

自定义绑定适配器中的通用lambda

在自定义适配器中遍历ListView

自定义视图的适配器中的NullPointerException

在自定义适配器中找不到ViewByID

如何在Android中自定义适配器?

在RecyclerView适配器中设置自定义字体

自定义适配器中的空指针异常

协程中的自定义适配器

自定义适配器中的意图

Fragment 中的自定义列表适配器