2017-02-13 11 views
2

作成注:もはやは、ネストされたツリービューに

I previously askedこの質問が、アカウントへのアクセスを持っても、私はアカウントを回復する能力を持っています。モデレータがこれを表示している場合は、以前の質問を削除してください。

質問:

Iメッセージ(基本的にネストされたレイアウト)のツリービューを作成するためにAndroidTreeView libraryを使用しています。あなたが見ることができるように、データを入れ子にすることができ、各メッセージの下に複数の子を持つことができ

[ 
    { 
     "id": 2, 
     "user_id": 1, 
     "message": "Hello", 
     "children": [ 
      { 
       "id": 3, 
       "user_id": 2, 
       "message": "Hi", 
       "children": [ 
        { 
         "id": 5, 
         "user_id": 3, 
         "message": "Hey", 
         "children": [ 

         ] 
        } 
       ] 
      }, 
      { 
       "id": 6, 
       "user_id": 2, 
       "message": "Bye", 
       "children": [ 

       ] 
      } 
     ] 
    }, 
    { 
     "id": 4, 
     "user_id": 2, 
     "message": "Heya", 
     "children": [ 

     ] 
    } 
] 

:私のコードで

は、私はこのようになりますJSONレスポンスを持っています。 (子供を含む)各オブジェクトには、以下を含むクラスMessage.java(Gsonモデルクラス)のものである:

public class Message implements Serializable { 
    @SerializedName("id") 
    @Expose 
    private Integer id; 
    @SerializedName("user_id") 
    @Expose 
    private Integer userId; 
    @SerializedName("message") 
    @Expose 
    private String message; 
    @SerializedName("children") 
    @Expose 
    private List<Message> children = null; 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public Integer getUserId() { 
     return userId; 
    } 

    public void setUserId(Integer userId) { 
     this.userId = userId; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 

    public List<Message> getChildren() { 
     return children; 
    } 

    public void setChildren(List<Message> children) { 
     this.children = children; 
    } 
} 

ツリーを構築するために、ここで私が持っているコードは、これまでのところ(ですMainActivity.java):私のコードの問題は、それが唯一の「Hello」を出力し、「へや」(2一番上のメッセージ)ということである

private List<Message> messages = response.body(); // the JSON response 

private TreeNode root = TreeNode.root(); 

for (Message message : messages) { 
    MessageAdapter.TreeItem messageItem = new MessageAdapter.TreeItem(message); 
    TreeNode parentNode = new TreeNode(messageItem).setViewHolder(new MessageAdapter(MainActivity.this)); 
    root.addChild(parentNode); 
} 

LinearLayout messageContainer = (LinearLayout) findViewById(R.id.messageContainer); 

AndroidTreeView tView = new AndroidTreeView(MainActivity.this, root); 
messageContainer.addView(tView.getView()); 

And here is the MessageAdapter.java: 

public class MessageAdapter extends TreeNode.BaseNodeViewHolder<MessageAdapter.TreeItem> { 
    private Context context; 

    private TextView messageTextView; 

    public MessageAdapter(Context context) { 
     super(context); 
     this.context = context; 
    } 

    @Override 
    public View createNodeView(TreeNode node, TreeItem value) { 
     final LayoutInflater inflater = LayoutInflater.from(context); 
     final View view = inflater.inflate(R.layout.message_layout, null, false); 

     Message message = value.message; 

     messageTextView = (TextView) view.findViewById(R.id.messageTextView); 
     messageTextView.setText(message.getMessage()); 

     return view; 
    } 

    public static class TreeItem { 
     public Message message; 

     public TreeItem(Message message) { 
      this.message = message; 
     } 
    } 
} 

代わり
- Hello 
- Heya 

、それがあるべき出力:

- Hello 
    - Hi 
     - Hey 
    - Bye 
- Heya 

すべてのネストされた子メッセージをループして各ノードに正しく追加するようにコードを変更するにはどうすればよいですか?

FYI、これは子ノードが(ライブラリのreadmeから取られた)親ノードに追加される方法です。すべての

TreeNode parent = new TreeNode("MyParentNode"); 
TreeNode child0 = new TreeNode("ChildNode0"); 
TreeNode child1 = new TreeNode("ChildNode1"); 
parent.addChildren(child0, child1); 
root.addChild(parent); 

答えて

0

まず、私はあなたがそれになりますList<Messages>を持っている必要はないと思いますJSONをツリーに変換するのが簡単です。

JSONArray arr = new JSONArray(response); 

for (int i = 0; i < arr.length(); i++) { 
    root.addChild(decodeMessages(arr.getJSONObject(i))); 
} 

private String decodeMessages(JSONObject jsonObject) { 
    TreeNode treeNode; 
    // decode message from json 
    try { 
     JSONArray jsonArray = jsonObject.getJSONArray("children"); 
     for (int i = 0; i < jsonArray.length(); i++) { 
      treeNode.addChild(decodeMessages(jsonArray.getJSONObject(i))); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    return treeNode; 
} 
+0

私はコード内の他の場所でも参照するので、私はむしろ 'List 'を使用したいと思います。 – user7555980

関連する問題