Android树形控件notifyDataSetChanged的问题
以hy大神 http://blog.youkuaiyun.com/lmj623565791/article/details/40212367 的程序为底 ,参考了 http://blog.youkuaiyun.com/true100/article/details/50608654?ref=myread 的动态插入数据,修改了动态插入数据notifyDataSetChanged()无效的问题,做个笔记。
在MainActivity添加数据源
private void init() {
// TODO Auto-generated method stub
mDatas2.add(new FileBean(21, 0, "1-文件管理系统"));
mDatas2.add(new FileBean(22, 21, "1-游戏"));
mDatas2.add(new FileBean(23, 21, "1-文档"));
mDatas2.add(new FileBean(24, 21, "1-程序"));
mDatas2.add(new FileBean(25, 22, "1-war3"));
mDatas2.add(new FileBean(26, 22, "1-刀塔传奇"));
mDatas2.add(new FileBean(27, 24, "1-面向对象"));
mDatas2.add(new FileBean(28, 24, "1-非面向对象"));
mDatas2.add(new FileBean(29, 27, "1-C++"));
mDatas2.add(new FileBean(30, 27, "1-JAVA"));
mDatas2.add(new FileBean(31, 27, "1-Javascript"));
mDatas2.add(new FileBean(32, 28, "1-C"));
}
通过按钮点击来增加数据
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
init();
mAdapter.insertNodeData(mDatas2,10);
}
});
TreeListViewAdapter添加动态数据的方法
public void insertNodeData(List<Node> list, int defult) {
try {
mAllNodes = TreeHelper.getSortedNodes(list, defult);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mNodes = TreeHelper.filterVisibleNode(mAllNodes);
notifyDataSetChanged();
}
另外:1、mDatas2.add(new FileBean(1, 0, "xxxx")) 里面的数据需要多加注意,有互联关系,如果程序通过网络来获取数据会复杂很多,也需要后台配合。
2、viewHolder.tab.setOnClickListener的加入是考虑在某个层里需要处理事件,而不是单单打开或者关闭展开