Skip to content

Commit

Permalink
add method (collapseNode and collapseBrotherNode) to TreeViewAdapter
Browse files Browse the repository at this point in the history
  • Loading branch information
TellH committed Jan 19, 2017
1 parent 16632f9 commit c3b24b5
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,12 @@ private void initData() {
adapter.setOnTreeNodeListener(new TreeViewAdapter.OnTreeNodeListener() {
@Override
public boolean onClick(TreeNode node, RecyclerView.ViewHolder holder) {
if (!node.isLeaf())
if (!node.isLeaf()) {
//Update and toggle the node.
onToggle(!node.isExpand(), holder);
if (!node.isExpand())
adapter.collapseBrotherNode(node);
}
return false;
}

Expand Down Expand Up @@ -107,7 +110,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.id_action_close_all:
adapter.closeAll();
adapter.collapseAll();
break;
default:
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ public void setParent(TreeNode parent) {
this.parent = parent;
}

public TreeNode getParent() {
return parent;
}

@Override
public String toString() {
return "TreeNode{" +
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package tellh.com.recyclertreeview_lib;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.util.DiffUtil;
import android.support.v7.widget.RecyclerView;
Expand Down Expand Up @@ -103,10 +104,11 @@ public void onClick(View v) {
if (selectedNode.isLeaf())
return;
boolean isExpand = selectedNode.isExpand();
int positionStart = displayNodes.indexOf(selectedNode) + 1;
if (!isExpand) {
notifyItemRangeInserted(holder.getLayoutPosition() + 1, addChildNodes(selectedNode, holder.getLayoutPosition() + 1));
notifyItemRangeInserted(positionStart, addChildNodes(selectedNode, positionStart));
} else {
notifyItemRangeRemoved(holder.getLayoutPosition() + 1, removeChildNodes(selectedNode, true));
notifyItemRangeRemoved(positionStart, removeChildNodes(selectedNode, true));
}
}
});
Expand Down Expand Up @@ -241,18 +243,11 @@ private boolean areItemsTheSame(TreeNode oldNode, TreeNode newNode) {
}

/**
* Close all root nodes.
* collapse all root nodes.
*/
public void closeAll() {
public void collapseAll() {
// Back up the nodes are displaying.
List<TreeNode> temp = new ArrayList<>();
for (TreeNode displayNode : displayNodes) {
try {
temp.add(displayNode.clone());
} catch (CloneNotSupportedException e) {
temp.add(displayNode);
}
}
List<TreeNode> temp = backupDisplayNodes();
//find all root nodes.
List<TreeNode> roots = new ArrayList<>();
for (TreeNode displayNode : displayNodes) {
Expand All @@ -266,4 +261,51 @@ public void closeAll() {
}
notifyDiff(temp);
}

@NonNull
private List<TreeNode> backupDisplayNodes() {
List<TreeNode> temp = new ArrayList<>();
for (TreeNode displayNode : displayNodes) {
try {
temp.add(displayNode.clone());
} catch (CloneNotSupportedException e) {
temp.add(displayNode);
}
}
return temp;
}

public void collapseNode(TreeNode pNode) {
List<TreeNode> temp = backupDisplayNodes();
removeChildNodes(pNode);
notifyDiff(temp);
}

public void collapseBrotherNode(TreeNode pNode) {
List<TreeNode> temp = backupDisplayNodes();
if (pNode.isRoot()) {
List<TreeNode> roots = new ArrayList<>();
for (TreeNode displayNode : displayNodes) {
if (displayNode.isRoot())
roots.add(displayNode);
}
//Close all root nodes.
for (TreeNode root : roots) {
if (root.isExpand() && !root.equals(pNode))
removeChildNodes(root);
}
} else {
TreeNode parent = pNode.getParent();
if (parent == null)
return;
List<TreeNode> childList = parent.getChildList();
for (TreeNode node : childList) {
if (node.equals(pNode) || !node.isExpand())
continue;
removeChildNodes(node);
}
}
notifyDiff(temp);
}

}

0 comments on commit c3b24b5

Please sign in to comment.