【已解决】 android新手,请教下android treeview ,异步加载
想请教下android下 树形控件怎么实现异步加载。找了半天找到
com.github.bmelnychuk:atv:1.2.+
这个库。
通过继承TreeNode.BaseNodeViewHolder ,实现自定义UI
package com.benqio.jwt.holder;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import com.benqio.jwt.R;
import com.benqio.jwt.fragment.video.ChooseDeviceFragment;
import com.github.johnkil.print.PrintView;
import com.unnamed.b.atv.model.TreeNode;
import com.xuexiang.xaop.logger.XLogger;
public class SelectableHeaderHolder extends TreeNode.BaseNodeViewHolder<IconTreeItemHolder.IconTreeItem> {
private TextView tvValue;
private PrintView arrowView;
private CheckBox nodeSelector;
public SelectableHeaderHolder(Context context) {
super(context);
}
@Override
public View createNodeView(final TreeNode treeNode, IconTreeItemHolder.IconTreeItem value) {
final LayoutInflater inflater = LayoutInflater.from(context);
final View view = inflater.inflate(R.layout.layout_selectable_header, null, false);
tvValue = (TextView) view.findViewById(R.id.node_value);
tvValue.setText(value.text);
final PrintView iconView = (PrintView) view.findViewById(R.id.icon);
iconView.setIconText(context.getResources().getString(value.icon));
arrowView = (PrintView) view.findViewById(R.id.arrow_icon);
if (treeNode.isLeaf()) {
arrowView.setVisibility(View.GONE);
}
nodeSelector = (CheckBox) view.findViewById(R.id.node_selector);
nodeSelector.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
treeNode.setSelected(isChecked);
for (TreeNode n : treeNode.getChildren()) {
getTreeView().selectNode(n, isChecked);
}
}
});
nodeSelector.setChecked(treeNode.isSelected());
treeNode.setClickListener(new TreeNode.TreeNodeClickListener() {
@Override
public void onClick(TreeNode node, Object value) {
XLogger.e(ChooseDeviceFragment.tempList.toString());
XLogger.e(node.toString());
XLogger.e(String.valueOf(node.getId()));
XLogger.e(node.getPath());
XLogger.e(node.getValue().toString());
}
});
return view;
}
@Override
public int getContainerStyle() {
return R.style.TreeNodeStyle;
}
@Override
public void toggle(boolean active) {
arrowView.setIconText(context.getResources().getString(active ? R.string.ic_keyboard_arrow_down : R.string.ic_keyboard_arrow_right));
}
@Override
public void toggleSelectionMode(boolean editModeEnabled) {
nodeSelector.setVisibility(editModeEnabled ? View.VISIBLE : View.GONE);
nodeSelector.setChecked(mNode.isSelected());
}
}
通过节点node点击事件getPath()可以拿到 1:1这样的数据,代表这个treeView第一个节点,第一个子节点被点击了,这是不是意味着我需要,根据这个节点path索引,去对象的arrayList找到对应节点的数据,然后去请求接口,然后在进行构造节点数据,追加到treeview里面啊。
还有这个对应的treeview的数据结构应该是怎样的,没有思路,还望可以指点,请教各位。
看到一个符合你的库,第一时间就是跑一跑这个库,熟悉他是怎么使用的,再结合自己的需求,这个库满足吗,哪里不满足,我能修改到满足吗。
库的功能和自己需求吻合的场景不多,主要是熟悉库,和自己的需求。
第一,我们估计没几个人熟悉这个库,要是帮助解决问题,第一时间就是熟悉这个库。
第二,你的需求要尽可能的描述清晰易懂,起码可以让我们了解到是什么需求,反正上面我没get到。。。。。。。
我先玩玩这个库。