如何在单个TextView中显示来自数组列表的多行文本?

9
我正在开发安卓应用程序,我想在一个文本视图中显示四行文本。我的数组列表包含以下数据:

客户名称:Nilesh
客户联系方式:23230200
客户城市:Pune

但是当我编写以下代码时,只有数组列表中的最后一行被显示出来。

XML

  <TextView android:id="@+id/kbpViewTvCustNm"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="4dp"
            android:layout_marginLeft="8dp"
            android:lines="4"
            android:textIsSelectable="false" />

代码

for (String details : list2)
  {
     custName.setText(details);
  }
7个回答

33
使用 StringBuilder 将您的数组转换为一个字符串,并在单个字符串之间添加换行符,如下所示:
StringBuilder builder = new StringBuilder();
for (String details : list2) {
   builder.append(details + "\n");
}

custName.setText(builder.toString());

2
这对我来说似乎是最好的解决方案,StringBuilder比String更适合追加文本。 - npace

2
<TextView
            android:id="@+id/kbpViewTvCustNm"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="4dp"
            android:layout_marginLeft="8dp"
            android:lines="4"
            android:textIsSelectable="false" />

0
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main3);
    Bundle bundle = getIntent().getExtras();
    assert bundle != null;
    ArrayList<String> expTit = bundle.getStringArrayList("expTit");
    ArrayList<Integer> expAmt =bundle.getIntegerArrayList("expAmt");
    TextView t= findViewById(R.id.textView2);
    TextView t2= findViewById(R.id.textView3);
    StringBuilder builder = new StringBuilder();
    if (expTit == null) throw new AssertionError();
    String text="";
    for (String details : expTit) {
        text = text + details + "\n";
    }
    t.setText(text);
}

它的应用程序崩溃了,我能知道为什么吗? - Simant Shrestha
请使用StringBuilder而不是String来查看它们之间的区别,请参考此链接:https://www.journaldev.com/538/string-vs-stringbuffer-vs-stringbuilder - nimi0112

0

将您的layout_widthwrap_content更改为特定大小,如下所示:

<TextView
            android:id="@+id/kbpViewTvCustNm"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="4dp"
            android:layout_marginLeft="8dp"
            android:lines="4"
            android:textIsSelectable="false" />

0

你好,你可以在文本视图中设置最大行数

  <TextView
android:id="@+id/address1"
android:gravity="left"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:maxLines="4"
android:lines="4"
android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod   tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."></TextView>

0
您可以将您的详细信息组合成一个字符串,并用换行符分隔:
String text="";
for (String details : list2) {
    text = text + details + "\n";
}
custName.setText(details);

0

针对您的整个POJO字段的简单解决方案:

for (Post post : posts) {
 String content = "";
 content += "ID: " + post.getId() + "\n";
 content += "User ID: " + post.getUserId() + "\n";
 content += "Title: " + post.getTitle() + "\n";
 content += "Text: " + post.getText() + "\n\n";

 textViewResult.append(content);         
  }
 }

对于 Kotlin:

   posts.forEach {post->
        var content = ""
        content += "ID: " +  post.id + "\n"
        content += "User ID: " + post.userId + "\n"
        content += "Title: " + post.title + "\n"
        content += "Text: " + post.text + "\n\n"
      textViewResult.append(content)
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接