我正在使用reddit API并尝试加载线程的注释树。我的问题是,我正在使用递归功能来做到这一点。我正在构建一个视图,然后以编程方式添加它。它适用于小线程,但是当它需要加载一个大的注释树时,我得到了stackoverflow.So我的主要问题是:什么是以编程方式加载嵌套注释的好方法,以及绕过堆栈溢出的最佳做法是什么?我有争论添加一个计数器添加评论,当他们超过了一些数字,我可能会打破循环,但这仍然不能保证我的“stackoverflow”免费程序。一般来说,我如何跟踪堆栈和堆?另外作为后续问题:我的动态视图在旋转时被破坏,并且每次都重新创建。与此相关的问题是重新创建速度很慢,并且会减慢轮换速度。那么是否有一种简单的方法来保存/保存旋转视图并再次添加它(setRetainInstance(true)对动态视图没有影响,仅在主布局上)。递归函数和注释树
private void addTextTree(JSONObject j, LinearLayout layoutparent) throws JSONException {
JSONObject j2 = j.getJSONObject("data");
JSONArray j3 = j2.getJSONArray("children");
LinearLayout currentparent = layoutparent;
Log.d("ADDINGVIEW", j3.length() + "");
for (int i = 0; i < j3.length(); i++) {
JSONObject j4 = j3.getJSONObject(i);
JSONObject j5 = j4.getJSONObject("data");
addComment(j5, currentparent);
}
}
private void addComment(JSONObject j, LinearLayout parent) throws JSONException {
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
LinearLayout LLHmain = new LinearLayout(getActivity());
LinearLayout LLVsecond = new LinearLayout(getActivity());
LLHmain.setOrientation(LinearLayout.HORIZONTAL);
LLHmain.setLayoutParams(lp);
LLVsecond.setOrientation(LinearLayout.VERTICAL);
LLVsecond.setLayoutParams(lp1);
TextView author = new TextView(getActivity());
TextView content = new TextView(getActivity());
ImageView bar = new ImageView(getActivity());
bar.setBackgroundResource(R.drawable.lines);
LLHmain.addView(bar, lp1);
author.setText(" " + j.optString("author") + " " + j.optInt("score") + " points");
author.setBackgroundResource(R.drawable.border);
String temp = j.optString("body_html");
String temp1 = Html.fromHtml(temp.substring(22, temp.length() - 12)).toString();
content.setText(Html.fromHtml(temp1));
content.setAutoLinkMask(Linkify.WEB_URLS);
content.setMovementMethod(LinkMovementMethod.getInstance());
LLVsecond.addView(author, lp);
LLVsecond.addView(content, lp);
LLHmain.addView(LLVsecond, lp1);
parent.addView(LLHmain, lp);
if (!j.optString("replies").equals("")) {
JSONObject replies = j.getJSONObject("replies");
addTextTree(replies, LLVsecond);
}
}
概括:
- 什么是处理textviews装载树木和防止堆栈溢出的最佳方式。栈和堆
- 上旋转保存动态视图
免责声明
您的建议看起来像[这非常糟糕的绘图](http://i.imgur.com/OHckIxf.png?1?2602)?我已经使用listfragment/listview,但没有任何嵌套,所以我不确定如何包裹我的头。这张照片是否与你心目中的相似? – user3542472 2014-09-12 22:38:21