Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

数据加载 #9

Closed
MirrorFlower opened this issue Jun 7, 2017 · 21 comments
Closed

数据加载 #9

MirrorFlower opened this issue Jun 7, 2017 · 21 comments

Comments

@MirrorFlower
Copy link

大神 请教个问题 假如层级很多 数据也很多 不能一次性加载 该如何实现

@shineM
Copy link
Owner

shineM commented Jun 7, 2017

不知道你的具体业务场景,如果你要分页加载或者分层级加载把新加入的节点塞进去然后刷新就行了

@MirrorFlower
Copy link
Author

当我将整个item设置为响应点击事件的时候 展开合上功能也失效了 只能响应点击事件了

@shineM
Copy link
Owner

shineM commented Jun 7, 2017

View的touch事件只能被消费一次,既然你的textView消费了就不会传给它的父View处理了;一个View只能设一个OnClickListener。针对上面两个事实和你的需求,可以在onClick中主动调用treeView.toggleNode(node)实现展开收起.

@shineM
Copy link
Owner

shineM commented Jun 8, 2017

如果是替换的话 让node直接指向新的对象然后刷新不就好了吗 至于增加翻倍了初步怀疑是你在bindView的时候执行的增加

@MirrorFlower
Copy link
Author

大神 能否留下QQ 我感觉我有好多想请教你的 - -!

@shineM
Copy link
Owner

shineM commented Jun 8, 2017

和本库有关的一切问题你都可以在这里提问,关于其他的问题我能解答的Google都能帮到你 :)

@MirrorFlower
Copy link
Author

@OverRide
public void bindView(final TreeNode treeNode) {
textView.setText(treeNode.getValue().toString());
imageView.setRotation(treeNode.isExpanded() ? 90 : 0);
itemView.setOnClickListener(new View.OnClickListener() {
@OverRide
public void onClick(View v) {
mainActivity.getValue(treeNode.getValue().toString());
}
});
}
bindView里 我给整个item设置的监听 然后调用了Activity的方法将treeNode.getValue().toString()返给了activity ,activity里判断:
public void getValue(String value) {
switch (value) {
case "Parent0":
//如何实现点击Parent0增加2个子项
break;
}
}

@MirrorFlower
Copy link
Author

buildTree()里面就初始化了一级的列表
private void buildTree() {
root = TreeNode.root();
for (int i = 0; i < 3; i++) {
treeNode1 = new TreeNode(new String("Parent" + i));
treeNode1.setLevel(0);
root.addChild(treeNode1);
}
}

@shineM
Copy link
Owner

shineM commented Jun 8, 2017

只加一次还是点击一次加一次?展开收起都加?

@MirrorFlower
Copy link
Author

只要点击Parent0展开 就要请求网络重新加载数据(数据条目由可能增加 也有可能条目不变 但是内容变了)

@shineM
Copy link
Owner

shineM commented Jun 8, 2017

网络请求回来后直接更新parent0的子节点数据(添加删除更新),然后调用treeView的expandNode(parent0)就可以了吧

@MirrorFlower
Copy link
Author

public void getValue(String value) {
switch (value) {
case "Parent0":
treeView.toggleNode(treeView.getAllNodes().get(0));
for (int i = 0; i < 2; i++) {
if (treeView.getAllNodes().get(0).isExpanded()) {
treeNode2 = new TreeNode(new String("新增" + i));
treeNode2.setLevel(1);
treeView.addNode(treeView.getAllNodes().get(0), treeNode2);
}
}
treeView.expandNode(treeView.getAllNodes().get(0));
break;
}
}
麻烦大神帮我看看问题出在哪?

@shineM
Copy link
Owner

shineM commented Jun 8, 2017

treeView.getAllNodes().get(0)不等于你点击的node,你把你的getValue(String value)改成getValue(TreeNode node),然后用参数里面的node

@MirrorFlower
Copy link
Author

public void getValue(TreeNode node) {
switch (node.getValue().toString()) {
case "Parent0":
treeView.toggleNode(node);
for (int i = 0; i < 2; i++) {
if (node.isExpanded()) {
treeNode2 = new TreeNode(new String("新增" + i));
treeNode2.setLevel(1);
treeView.addNode(node, treeNode2);
}else {
treeView.deleteNode(treeNode2);
}
}
treeView.refreshTreeView();
break;
}
}
这样的话还是有点问题 反复的执行展开合上操作 条目数量还是有问题

@shineM
Copy link
Owner

shineM commented Jun 8, 2017

你执行每一行代码前先搞清楚它是干什么的

treeView.toggleNode(node);//这行代码的目的是什么;
if (node.isExpanded()) {
//确定是在这里执行增加吗?不是在else吗
}else{

}
treeView.refreshTreeView();//这个有用吗 为什么不是调treeView.toggleNode(node);

@MirrorFlower
Copy link
Author

treeView.toggleNode(node)是手动设置展开 不是么

if (node.isExpanded())判断是否是展开状态 如果是展开状态 才去add并显示数据 不是吗 为何是在else呀

treeView.refreshTreeView();用这个方法 是发现 在展开合上的时候 前面箭头不会转向 ,用了这个就好了 - -! 求大神继续指教 - -! 感激不尽

@shineM
Copy link
Owner

shineM commented Jun 8, 2017

请先说明一下你的具体需求,点击未展开的节点然后请求网络刷新数据?还是先展开再请求网络刷新数据。收起的时候为什么又要删除?

@MirrorFlower
Copy link
Author

先展开再请求网络,数据太多 需要分层加载, 我没明白的地方是:如何保证每次展开的时候 都能刷新到最新的数据(每次展开都要去重新请求)

@MirrorFlower
Copy link
Author

未展开的节点先不管 展开一个 就请求一个 0.0

@shineM
Copy link
Owner

shineM commented Jun 8, 2017

@OverRide
public void bindView(final TreeNode treeNode) {
imageView.setRotation(treeNode.isExpanded() ? 90 : 0);
itemView.setOnClickListener(new View.OnClickListener() {
@OverRide
public void onClick(View v) {
treeView.toggleNode(treeNode);
if (treeNode.isExpanded()) {
activity.getValue(treeNode);
}
}
});
}
public void getValue(TreeNode node) {
for (int i = 0; i < 2; i++) {
TreeNode newNode = new TreeNode(new String("新增" + i));
newNode.setLevel(1);
node.addChild(newNode);
}
treeView.refreshTreeView();

}

你试试这么写有没有问题 我尽力了

@MirrorFlower
Copy link
Author

好 感谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants