android中树形json解析为对象,并通过dialog显示,多级列表

原创 2015年11月19日 11:50:34
{"id":"0","text":"信件简历夹","type":"root","data":"0","state":{"selected":true,"opened":true},"children":[{"id":"525B0D60762311E58D60F73FF458773A","text":"New node","data":"525B0D60762311E58D60F73FF458773A","pid":"0","state":{"selected":false,"opened":true},"children":[{"id":"525BD0B0762311E590B0C6DB849AE720","text":"New node","data":"525BD0B0762311E590B0C6DB849AE720","pid":"525B0D60762311E58D60F73FF458773A","state":{"selected":false,"opened":true},"type":"default"},{"id":"5272B410762311E5B4108E983A64A6A9","text":"New node1","data":"5272B410762311E5B4108E983A64A6A9","pid":"525B0D60762311E58D60F73FF458773A","state":{"selected":false,"opened":true},"children":[{"id":"5272DB20762311E59B20C18DB31F394D","text":"New node","data":"5272DB20762311E59B20C18DB31F394D","pid":"5272B410762311E5B4108E983A64A6A9","state":{"selected":false,"opened":true},"children":[{"id":"52735050762311E590508BDCE6B97C58","text":"New node3","data":"52735050762311E590508BDCE6B97C58","pid":"5272DB20762311E59B20C18DB31F394D","state":{"selected":false,"opened":true},"type":"default"}]},{"id":"52732940762311E5A9409FDA0F0C912E","text":"New node2","data":"52732940762311E5A9409FDA0F0C912E","pid":"5272B410762311E5B4108E983A64A6A9","state":{"selected":false,"opened":true},"type":"default"}]}]}]}
上边是从服务器获取到的json数据,是树形,并且服务器端要求json树不是固定的
做的是个菜单,比如(美食--火锅--王婆大虾)(旅游--龙门石窟)
也就是说下边的项不是固定的,可能2项,也可能3,4项
(部分示例)
{
	"id": "0",
	"text": "信件简历夹",
	"type": "root",
	"data": "0",
	"state": {
		"selected": true,
		"opened": true
	},
	"children": [
		{
			"id": "525B0D60762311E58D60F73FF458773A",
			"text": "New node",
			"data": "525B0D60762311E58D60F73FF458773A",
			"pid": "0",
			"state": {
				"selected": false,
				"opened": true
			},
			"children": [.........................
这是 JsonBean.java

public class JsonBean  implements Serializable{ 
@TreeNodeId private String id;
@TreeNodeLabel private String text;
public String type;//判断节点的,是否跟节点或者是否有下一节点
@TreeNodePid private String pid;
public String data;
// public JSONObject state;
public JsonBean[] children;
public JsonBean(String id,String pid,String text)
{ super();
this.id = id; this.pid = pid;
this.text = text; }

}

// Stre为json字符串,得到data树 public void jsonDo(String Stre) { JSONObject json; try { json = new JSONObject(Stre);          //json数据有一个type,当他的值不是default,则ta有children if (!"default".equals(json.getString("type"))) {// 这个时候才有children Gson gson = new Gson(); List<JsonBean> lists = gson.fromJson(json.getString("children"),new TypeToken<List<JsonBean>>() { }.getType()); System.out.println(lists.size()); arr.clear(); getDataFromListBean(lists); System.out.println("给之前  "+arr.size()); // 其中,state还需要用json解析 Intent intent=new Intent(context,ExpandDialog.class); Bundle bundle=new Bundle(); bundle.putSerializable("list",arr); intent.putExtras(bundle); context.startActivity(intent); } } catch (JSONException e) { e.printStackTrace(); } } ArrayList<JsonBean> arr = new ArrayList<JsonBean>(); ArrayList<JsonBean> arr1; private void getDataFromListBean(List<JsonBean> lists) { for (JsonBean jsonBean : lists) {           //将遍历到的jsonBean保存到list中 arr.add(jsonBean); if (!"default".equals(jsonBean.type)) { arr1 = new ArrayList<JsonBean>(); JsonBean[] jsonArr = jsonBean.children; for (int i = 0; i < jsonArr.length; i++) { arr1.add(jsonArr[i]); }//递归 getDataFromListBean(arr1); } } }

上面是将获取到的json数据,转化为6个jsonBean对象,然后将list<JsonBean>传给dialog(我继承的是activity,用的是官方的dialog样式)

还有就是用intent传list集合

由于菜单列是不固定的,所以用不了expandableListview

http://blog.csdn.net/lmj623565791/article/details/40212367

借用大牛的无限树,具体dialog用法就请大家参考大牛写的

public class ExpandDialog extends BaseActivity{// private List<JsonBean> mDatas2 = new ArrayList<JsonBean>(); private List<JsonBean> mDatas2 = new ArrayList<JsonBean>(); private ListView mTree; private TreeListViewAdapter mAdapter; String pageClick="0"; String selectUrl=""; ArrayList<JsonBean> mylist; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.expand_dialog); mTree = (ListView) findViewById(R.id.id_tree);

               //获取传过来的list集合 mylist=(ArrayList<JsonBean>)getIntent().getSerializableExtra("list"); //System.out.println(mylist.size()); try { mAdapter = new SimpleTreeAdapter<JsonBean>(mTree, this, mylist, 10); mAdapter.setOnTreeNodeClickListener(new OnTreeNodeClickListener() { @Override public void onClick(Node node, int position) { if (node.isLeaf()) { String talentsReserveIds=OpenSharedPerferences.read(getApplicationContext(), "talentStore", "talentsReserveIds"); pageClick=OpenSharedPerferences.read(getApplicationContext(), "talentStore", "pageClick"); RequestParams params=new RequestParams(); if(pageClick.equals("1")){ selectUrl=ConstantURL.REMOVE_RESUME_CLIP; params.addBodyParameter("companyId", "535662D0416911E5A076F8F061532E9D"); params.addBodyParameter("favoritesIds", node.getId()); params.addBodyParameter("talentsReserveIds", talentsReserveIds); }else{ selectUrl=ConstantURL.RECOVER_RESUME_CLIP; params.addBodyParameter("companyId", "535662D0416911E5A076F8F061532E9D"); params.addBodyParameter("favoritesIds", node.getId()); } requestUrl(HttpMethod.POST,selectUrl, params,new RequestCallBack<String>() { @Override public void onFailure(HttpException arg0, String err) { Toast.makeText(getApplicationContext(), "end错误!", 2000).show(); } @Override public void onSuccess(ResponseInfo<String> info) { Gson gson=new Gson(); GsonDataBean bean=gson.fromJson(info.result, GsonDataBean.class); String msg=bean.message; Toast.makeText(getApplicationContext(),msg, 2000).show();      } }); Toast.makeText(getApplicationContext(), node.getText(), Toast.LENGTH_SHORT).show(); finish(); } } }); } catch (Exception e) { e.printStackTrace(); } mylist.clear(); mTree.setAdapter(mAdapter); }

}


                

android中树形json解析为对象,并通过dialog显示,多级列表

{"id":"0","text":"信件简历夹","type":"root","data":"0","state":{"selected":true,"opened":true},"children"...
  • qq_21036939
  • qq_21036939
  • 2015年12月09日 17:31
  • 1654

后台获取的json数据转换成树结构数据

今天遇到一个问题,前台页面所需数据格式是树结构格式,类似下图1,但是后台返回数据格式是却是无序的json数组,如图2 解决思路: 首先,我遇到的问题是后台返回的每条数据是缺少父级Id的,所...
  • cysear
  • cysear
  • 2017年11月20日 21:53
  • 322

json转json树状结构

在写Restful服务的时候,因为都是返回去的都是一条条的json对象,这些都对象之间又是有关系的,但是却没有很好的体现出来,返回到页面的时候,不能成为一个树。返回去的json串数据如下: [{"b...
  • dandanzmc
  • dandanzmc
  • 2015年06月30日 21:18
  • 9440

android 创建任意层树形结构开发Demo

  • 2015年12月29日 15:27
  • 6.36MB
  • 下载

Android中的树状(tree)列表

转载地址:http://www.cnblogs.com/xiaofeixiang/p/4109969.html 树状列表前端挺常用的,还有人专门写过Ztree,Android中有的时候也需要...
  • l970859633
  • l970859633
  • 2016年12月22日 15:49
  • 1080

Android 打造任意层级树形控件 考验你的数据结构和设计

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40212367,本文出自:【张鸿洋的博客】1、概述大家在项目中或多或少的可能会见到...
  • lmj623565791
  • lmj623565791
  • 2014年10月20日 09:28
  • 91252

Android 使用listview实现树形结构

一、概述:1、效果图: 2、实现的功能: 1)缩进的树形结构 2)点击箭头可以展开与关闭 3)可以是任意层级的树3、使用的技术: 1)子父节点关联 2)在listview树结构里的on...
  • lovoo
  • lovoo
  • 2016年06月08日 09:38
  • 2715

android中树形json解析为对象,并通过dialog显示,多级列表

{"id":"0","text":"信件简历夹","type":"root","data":"0","state":{"selected":true,"opened":true},"children"...
  • qq_21036939
  • qq_21036939
  • 2015年11月19日 11:50
  • 507

Android ExpandableListview使用gson解析树形结构数据。

Android的数据提供了json和XML方面的
  • a11483314
  • a11483314
  • 2014年10月31日 15:59
  • 846

解析从网络获取的json,显示到listview列表上

/************************/-------->         MainActivity   类: package com.wlxstq; import java.io...
  • Xuqiang158
  • Xuqiang158
  • 2016年04月05日 09:54
  • 810
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android中树形json解析为对象,并通过dialog显示,多级列表
举报原因:
原因补充:

(最多只允许输入30个字)