【问题标题】:Custom ListView adapters with dynamic textView creation within the listview adapter在 listview 适配器中创建动态 textView 的自定义 ListView 适配器
【发布时间】:2014-07-08 16:55:47
【问题描述】:

我的要求如下:

创建一个自定义列表视图,其中包含标题和副标题(来自 xml 的静态内容),然后是包含文本视图的线性布局,它将在运行时/动态时创建。在运行时创建的文本视图的数量可能在 1-10 之间变化。在线性布局之下,可能有一个图像或一个文本视图(但只有一个)。

编辑:这些动态文本视图在运行时可能包含也可能不包含复合可绘制对象。

我尝试了扩展baseadapter的自定义适配器,可以实现标题和副标题以及图像和文本视图。但我无法创建动态文本视图并将它们添加到列表视图的当前列表项中。

请在图片中找到示例参考,红色边框线代表要创建的动态文本视图。

代码如下:

for(int i =0; i< jsonDetails.size(); i++) {
    mh.textview1 = new TextView(context);

    if(null != jsonDetails.get(i+"")) {
        mh.linearLayout.addView(mh.textview1);
        mh.textview1.setLayoutParams(mh.textViewLP);
        mh.textview1.setGravity(Gravity.CENTER_VERTICAL);
        mh.textview1.setText("Test" + i);
    }
}

【问题讨论】:

    标签: android android-layout listview android-listview


    【解决方案1】:

    我建议不要尝试像这样动态添加/删除任意数量的文本视图。我将采取的方法是将文本元素组合成一个元素,并且在列表项的布局中始终只有一个 TextView。

    StringBuilder builder = new StringBuilder();
    for (int i =0; i< jsonDetails.size(); i++) {
        if (null != jsonDetails.get(Integer.toString(i)) {
            builder.append("APPEND TEXT HERE");
        }
    }
    mh.textView.setText(builder.toString());
    

    【讨论】:

    • 这是仪式。但是如果需要动态添加一个compoundDrawable,那么我想我们必须添加textviews。对不起,我忘了在要求中提到这一点。
    • 不一定。您可以使用 SpannableStringBuilder 并在元素之间添加一些 ImageSpans。
    • 不要用SpannableStringBuilder调用toString(),调用setText()时只传递SpannableStringBuilder本身
    • lineItem 里面没有任何文字,所以它的长度为零,跨度长度也为零。我怀疑这可能是问题所在。
    • 不,span 包含一些文本。文本需要存在才能使跨度存在。加个空格什么的就行了。
    【解决方案2】:

    最后用 ," " 引号创建了一个新的 stringbuilder 对象。并将每个字符串附加到文本视图。最后,当与线性布局 n 东西一起使用时,我得到了所需的输出。感谢您的帮助:)

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多