如何在单个活动中显示多个标题和点
我正在遵循这个 SO解决方案,我已经成功parsed JSON
,但不知道如何在TextViews中显示headings
和points
。
这就是我的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是否支持该标记。
- android studio和netbeans中输入扫描程序和解析的不同行为
- 如何使用坐标捕获android中的图像
- 空指针问题显示资产文件夹Android 2.2 SDK中的图像
- Android中状态栏中的动画
- java.lang中。 RuntimeException未找到Retrofit注释。 (参数#3)
- Android Glide库NoClassDefFoundError
- 由大字符串引起的OutOfMemoryException
- 如何在C ++代码中保留C ++对象? 可能?
- 将RecyclerView.OnItemTouchListener中的MotionEvent传递给GestureDetectorCompat