如何在单个活动中显示多个标题和点

我正在遵循这个 SO解决方案,我已经成功parsed JSON ,但不知道如何在TextViews中显示headingspoints

这就是我的JSON样子:

 { "technology": [ { "title": "Android", "description": [ { "heading": "Manufactures", "points": [ "Google", "Samsung" ] }, { "heading": "Platforms", "points": [ "Kitkat", "ICS" ] } ] } ] } 

举个例子,如果我tap on Android ,那么我want to show这样的东西:

 Manufactures [dot] Google [dot] Samsung Platforms [dot] Kitkat [dot] ICS 

reference请看这个图像:

在此处输入图像描述

取代Why We Like It ,我想展示Manufactures并代替Need to Know ,我想展示Platforms (及其各自的点),如图所示。

getting这样的东西:

 Platforms [dot] ICS 

reference请看这个图像:

在此处输入图像描述

那是什么原因? 我必须在我的代码中进行更改?

DescriptionActivity.java:-

  for(int s=0; s<arrayListDescription.size(); s++) { description = arrayListDescription.get(s); strHeading = " " + description.getHeading(); Log.d("heading::", strHeading); arrayListPoints = description.getPoints(); for(int z=0; z<arrayListPoints.size(); z++) { String dot = getString(R.string.dot); strPoints = ""; strPoints += "  " + dot + " " + arrayListPoints.get(z) + "\n"; Log.d("points::", strPoints); } textViewPoints.setText(Html.fromHtml(strPoints)); } textViewHeading.setText(Html.fromHtml(strHeading)); textViewHeading.setTextSize(20); } 

activity_description.xml: –

      

这是我的Log所说的:

 08-28 04:47:39.653: D/heading::(1902): Manufactures 08-28 04:47:39.653: D/points::(1902):  ·Google 08-28 04:47:39.671: D/points::(1902):  ·Samsung 08-28 04:47:39.761: D/heading::(1902): Platforms 08-28 04:47:39.761: D/points::(1902):  ·Kitkat 08-28 04:47:39.761: D/points::(1902):  ·ICS 

通过using @ Dreagen的解决方案, getting这样的东西:

 Platforms null[dot]Google[dot]Samsung[dot]Kitkat[dot]ICS 

reference请看这个image

在此处输入图像描述

我用过这段代码:

 for(int z=0; z<arrayListPoints.size(); z++) { String dot = getString(R.string.dot); // strPoints += dot + arrayListPoints.get(z) + "\n"; strPoints += " ·" + arrayListPoints.get(z) + System.getProperty("line.separator"); Log.d("points::", strPoints); } 

活动

 public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayList mydata = new ArrayList(); // set 1 Model model = new Model(); ArrayList points = new ArrayList(); model.setHeading("Manufactures"); points.add("Google"); points.add("Samsung"); model.setPoints(points); mydata.add(model); // set 2 model = new Model(); points = new ArrayList(); model.setHeading("Platforms"); points.add("Kitkat"); points.add("ICS"); model.setPoints(points); mydata.add(model); // String str = // "

An Unordered List:


• foo
• bar
• baz
"; TextView textview = (TextView) findViewById(R.id.myText); String result = ""; for (int i = 0; i < mydata.size(); i++) { result += "

" + mydata.get(i).getHeading() + "

"; ArrayList
appendPoints = new ArrayList(mydata .get(i).getPoints()); for (int j = 0; j < appendPoints.size(); j++){ result += "• " + appendPoints.get(j) + "
";} } Spanned spannedResult = Html.fromHtml(result); textview.setText(spannedResult); } }

模型

 public class Model { private String heading; private ArrayList points; public String getHeading() { return heading; } public void setHeading(String heading) { this.heading = heading; } public ArrayList getPoints() { return points; } public void setPoints(ArrayList points) { this.points = points; } } 

XML:

    

完整的源代码

我想你的问题就在这里

 for(int z=0; z 

你每次循环都只是覆盖strPoints ,这意味着最后你只有最后一个点。 日志显示两者,因为每次循环时都输出到日志。

将其更改为:

 for(int z=0; z 

注意+=而不是只是=\n的更改使用System.getProperty("line.separator"); 希望这可以帮助

除了Dreagen的答案,您应该将新的线符号更改为br标签。 其他解决方案是使用pre格式化文本,但我不确定Android是否支持该标记。