Android 打造任意层级树形控件 考验你的数据结构和设计

  1. public FileBean(int _id, int parentId, String name)

  2. {

  3. super();

  4. this._id = _id;

  5. this.parentId = parentId;

  6. this.name = name;

  7. }

  8. }

现在,不用说,应该也知道我们通过注解来确定的。

下面看我们如何将这数据转化为树

布局文件就一个listview,就补贴了,直接看Activity

[java]  view plain copy 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. package com.zhy.tree_view;

  2. import java.util.ArrayList;

  3. import java.util.List;

  4. import android.app.Activity;

  5. import android.os.Bundle;

  6. import android.widget.ListView;

  7. import com.zhy.bean.FileBean;

  8. import com.zhy.tree.bean.TreeListViewAdapter;

  9. public class MainActivity extends Activity

  10. {

  11. private List mDatas = new ArrayList();

  12. private ListView mTree;

  13. private TreeListViewAdapter mAdapter;

  14. @Override

  15. protected void onCreate(Bundle savedInstanceState)

  16. {

  17. super.onCreate(savedInstanceState);

  18. setContentView(R.layout.activity_main);

  19. initDatas();

  20. mTree = (ListView) findViewById(R.id.id_tree);

  21. try

  22. {

  23. mAdapter = new SimpleTreeAdapter(mTree, this, mDatas, 10);

  24. mTree.setAdapter(mAdapter);

  25. } catch (IllegalAccessException e)

  26. {

  27. e.printStackTrace();

  28. }

  29. }

  30. private void initDatas()

  31. {

  32. // id , pid , label , 其他属性

  33. mDatas.add(new FileBean(1, 0, “文件管理系统”));

  34. mDatas.add(new FileBean(2, 1, “游戏”));

  35. mDatas.add(new FileBean(3, 1, “文档”));

  36. mDatas.add(new FileBean(4, 1, “程序”));

  37. mDatas.add(new FileBean(5, 2, “war3”));

  38. mDatas.add(new FileBean(6, 2, “刀塔传奇”));

  39. mDatas.add(new FileBean(7, 4, “面向对象”));

  40. mDatas.add(new FileBean(8, 4, “非面向对象”));

  41. mDatas.add(new FileBean(9, 7, “C++”));

  42. mDatas.add(new FileBean(10, 7, “JAVA”));

  43. mDatas.add(new FileBean(11, 7, “Javascript”));

  44. mDatas.add(new FileBean(12, 8, “C”));

  45. }

  46. }

Activity里面并没有什么特殊的代码,拿到listview,传入mData,当中初始化了一个Adapter;

看来我们的核心代码都在我们的Adapter里面:

那么看一眼我们的Adapter

[java]  view plain copy 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. package com.zhy.tree_view;

  2. import java.util.List;

  3. import android.content.Context;

  4. import android.view.View;

  5. import android.view.ViewGroup;

  6. import android.widget.ImageView;

  7. import android.widget.ListView;

  8. import android.widget.TextView;

  9. import com.zhy.tree.bean.Node;

  10. import com.zhy.tree.bean.TreeListViewAdapter;

  11. public class SimpleTreeAdapter extends TreeListViewAdapter

  12. {

  13. public SimpleTreeAdapter(ListView mTree, Context context, List datas,

  14. int defaultExpandLevel) throws IllegalArgumentException,

  15. IllegalAccessException

  16. {

  17. super(mTree, context, datas, defaultExpandLevel);

  18. }

  19. @Override

  20. public View getConvertView(Node node , int position, View convertView, ViewGroup parent)

  21. {

  22. ViewHolder viewHolder = null;

  23. if (convertView == null)

  24. {

  25. convertView = mInflater.inflate(R.layout.list_item, parent, false);

  26. viewHolder = new ViewHolder();

  27. viewHolder.icon = (ImageView) convertView

  28. .findViewById(R.id.id_treenode_icon);

  29. viewHolder.label = (TextView) convertView

  30. .findViewById(R.id.id_treenode_label);

  31. convertView.setTag(viewHolder);

  32. } else

  33. {

  34. viewHolder = (ViewHolder) convertView.getTag();

  35. }

  36. if (node.getIcon() == -1)

  37. {

  38. viewHolder.icon.setVisibility(View.INVISIBLE);

  39. } else

  40. {

  41. viewHolder.icon.setVisibilit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值