? ?TreeView控件用来显示信息的分级视图,如同Windows里的资源管理器的目录。TreeView控件中的各项信息都有一个与之相关的Node对象。TreeView显示Node对象的分层目录结构,每个Node对象均由一个Label对象和其相关的位图组成。在建立TreeView控件后,我们可以展开和折叠、显示或隐藏其中的节点。TreeView控件一般用来显示文件和目录结构、文档中的类层次、索引中的层次和其他具有分层目录结构的信息。 ??????? 思路是:按照类似于“树”的结构组织数据,界面上直接利用大家经常用的listview实现的。下面这个是节点信息的类: public class PDFOutlineElement { ??????? 首先是这个level,是很关键的,他表示的是当前节点所在的层次,正是他帮助我们在界面上显示出来了层次效果,其实这个树形结构并不是树形结构,所有的数据都维护在一个ArrayList里面,某一个节点A下面有子节点B、C,其实A、B、C这三个节点在ArrayList里面是顺序存放的,如果A的层次是level,那个他的子节点的层次是level+1,我们在getView()的时候我们可以不借助系统自动给我们画上,而是可以自己指定他的位置holder.icon.setPadding(25 * (level + 1), holder.icon.getPaddingTop(), 0, holder.icon.getPaddingBottom());,这样他的子节点便具有了缩进的效果。 ??????? 然后是如何实现“展开”和 “缩回”的效果,其实这个只不过 是当单击摸个节点的时候,如果这个节点下面有子节点而且是“缩回”的,就把他的所有的子节点都从那个ArrayList里面删除调,然后 notifyDataSetChanged(),同理就是“展开”的时候,就是在这个节点后面添加子节点到ArrayList里面,然后 notifyDataSetChanged()。 ??????? 明白了这个思路,getView: public View getView(int position, View convertView, ViewGroup parent) {
? ? private String id;//当前节点的id
? ? private String outlineTitle ;//节点上面显示的信息
? ? private boolean mhasParent ; //是否有父节点
? ? private boolean mhasChild ;//是否有孩子节点
? ? private String parent;//父节点的id
? ? private int level;//当前节点所在的层次
}
? ?? ?? ?? ?ViewHolder holder;
? ?? ?? ?? ?/*if (convertView == null) {*/
? ?? ?? ?? ?? ? convertView = mInflater.inflate(R.layout.outline, null);
? ?? ?? ?? ?? ? holder = new ViewHolder();
? ?? ?? ?? ?? ? holder.text = (TextView) convertView.findViewById(R.id.text);
? ?? ?? ?? ?? ? holder.icon = (ImageView) convertView.findViewById(R.id.icon);
? ?? ?? ?? ?? ? convertView.setTag(holder);
? ?? ?? ?? ?/*} else {
? ?? ?? ?? ?? ? holder = (ViewHolder) convertView.getTag();
? ?? ?? ?? ?}*/
? ?? ?? ?? ?int level = mfilelist.get(position).getLevel();//每次根据节点的层次绘制显示的位置
? ?? ?? ?? ? holder.icon.setPadding(25 * (level + 1), holder.icon
? ?? ?? ?? ?? ?? ???.getPaddingTop(), 0, holder.icon.getPaddingBottom());
? ?? ?? ?? ?holder.text.setText(mfilelist.get(position).getOutlineTitle());
? ?? ?? ?? ?? ?? ?? ? //如果有孩子而且当前是不是展开的图标设置为“+”号的图标
? ?? ?? ?? ?if (mfilelist.get(position).isMhasChild()
? ?? ?? ?? ?? ?? ???&& (mfilelist.get(position).isExpanded() == false)) {
? ?? ?? ?? ?? ? holder.icon.setImageBitmap(mIconCollapse);
? ?? ?? ?? ?} else if (mfilelist.get(position).isMhasChild()
? ?? ?? ?? ?? ?? ???&& (mfilelist.get(position).isExpanded() == true)) {
? ?? ?? ?? ?? ?? ?? ? //如果有孩子而且当前是不是展开的图标设置为“+”号的图标
? ?? ?? ?? ?? ? holder.icon.setImageBitmap(mIconExpand);
? ?? ?? ?? ?} else if (!mfilelist.get(position).isMhasChild()){
? ?? ?? ?? ?? ? holder.icon.setImageBitmap(mIconCollapse);
? ?? ?? ?? ?? ? holder.icon.setVisibility(View.INVISIBLE);//这里不要设置为GONE,因为GONE不显示而且不占位置的,而INVISIBLE是不显示但是占位置的
? ?? ?? ?? ?}
? ?? ?? ?? ?return convertView;
? ?? ???}



详细解决方案
兑现Android 中的TreeView效果
热度:70 发布时间:2016-05-01 18:53:51.0
相关解决方案
- android 读取byte[]中的元素解决方案
- android 标题栏兑现方式
- android 中Activity向BroadcastReceiver发送数据,该怎么解决
- Android 4.0 为什么模拟器老是提示小弟我谷歌拼音输入法已停止
- android:getSharedPreferences() 这是哪个类的方法解决思路
- android 怎么判断一个程序是否联网
- android RadioButton如何设置默认选中
- android 怎么重新设置锚点
- android 图片对象获取的有关问题
- android 关于服务连接的疑义
- android 怎么实现对view的放大和缩小
- android ID,该如何处理
- 准备复习2-3个月,看java+android,请问有经验者,怎么看效果最好》
- android UI线程与AsyncTask的有关问题
- android(java) 中文乱码的有关问题
- Windows Form 中怎么将 treeview 的节点与页面内容关联
- TreeView 中随着焦点的变化自动滚动,该怎么处理
- TreeView 中随着焦点的变化自动滚动解决思路
- treeview 铺展和折叠节点时变化图标
- ASP.NET C# TreeView 遍历文件夹 公布
- TreeView 加下了ShowCheckBoxes="All" 就是都加下了checkbox,怎么根据查找出来的数据让checkbox自动打钩
- treeview 点击节点后“不收缩”(因为点部门节点后,所有的节点都收缩了,只看到公司这个根节点)如何搞
- 如何把 TreeView 外面的网格去掉
- Microsoft.Web.UI.WebControls.TreeView,该怎么解决
- asp.net TreeView 动态绑定数据库,该如何解决
- TreeView 后台老板添加方法
- TreeView checkbox 只读解决办法
- TreeView 没有滚动条,该怎么解决
- treeview 节点点击事件,该如何解决
- TreeView 小弟我要的是根节点的第一个子节点被选上