android横向树状,Android无限级树状结构

1 packagecn.asiontang.nleveltreelistview;2

3 importandroid.annotation.TargetApi;4 importandroid.content.Context;5 importandroid.os.Build;6 importandroid.util.AttributeSet;7 importandroid.view.View;8 importandroid.widget.AdapterView;9 importandroid.widget.ListAdapter;10 importandroid.widget.ListView;11

12 /**

13 * 支持N(无限)层级的树列表结构14 *15 *

参考资料:

16 * 23 *24 *@authorAsionTang25 *@since2016年6月1日 18:38:4326 */

27 @SuppressWarnings("unused")28 public class NLevelTreeView extendsListView29 {30 privateOnTreeNodeClickListener mOnTreeNodeClickListener;31

32 public NLevelTreeView(finalContext context)33 {34 super(context);35 this.init();36 }37

38 public NLevelTreeView(final Context context, finalAttributeSet attrs)39 {40 super(context, attrs);41 this.init();42 }43

44 public NLevelTreeView(final Context context, final AttributeSet attrs, final intdefStyleAttr)45 {46 super(context, attrs, defStyleAttr);47 this.init();48 }49

50 @TargetApi(Build.VERSION_CODES.LOLLIPOP)51 public NLevelTreeView(final Context context, final AttributeSet attrs, final int defStyleAttr, final intdefStyleRes)52 {53 super(context, attrs, defStyleAttr, defStyleRes);54 this.init();55 }56

57 private voidinit()58 {59 }60

61 public void setAdapter(finalNLevelTreeNodeAdapter adapter)62 {63 super.setAdapter(adapter);64

65 //让 NLevelTreeNodeAdapter 处理 节点 收缩展开 动作

66 super.setOnItemClickListener(adapter);67

68 //处理当 叶子节点 被点击后的事件 回调。

69 adapter.setOuterOnItemClickListener(newOnItemClickListener()70 {71 @Override72 public void onItemClick(final AdapterView> parent, final View view, final int position, final longid)73 {74 if (NLevelTreeView.this.mOnTreeNodeClickListener != null)75 {76 final NLevelTreeNode item =(NLevelTreeNode) parent.getItemAtPosition(position);77 NLevelTreeView.this.mOnTreeNodeClickListener.onTreeNodeClick(item);78 }79 }80 });81 }82

83 /**

84 * 必须使用继承自 NLevelTreeNodeAdapter 的 适配器,否则会出现异常。85 */

86 @Override87 public void setAdapter(finalListAdapter adapter)88 {89 if (adapter instanceofNLevelTreeNodeAdapter)90 this.setAdapter((NLevelTreeNodeAdapter) adapter);91 else

92 throw new RuntimeException("For NLevelTreeView, use setAdapter(NLevelTreeNodeAdapter) instead of setAdapter(ListAdapter)");93 }94

95 /**

96 * 不支持使用此回调方式97 */

98 @Override99 @Deprecated100 public void setOnItemClickListener(finalOnItemClickListener listener)101 {102 //实际的事件回调在setAdapter里设置,由 setOnTreeNodeClickListener 处理。103 //super.setOuterOnItemClickListener(listener);

104

105 throw new RuntimeException("For NLevelTreeView, use setOnTreeNodeClickListener() instead of setOnItemClickListener()");106 }107

108 /**

109 * 默认只支持叶子节点的Click事件110 */

111 public void setOnTreeNodeClickListener(finalOnTreeNodeClickListener listener)112 {113 this.mOnTreeNodeClickListener =listener;114 }115

116 /**

117 * 默认只支持叶子节点的Click事件118 */

119 public interfaceOnTreeNodeClickListener120 {121 /**

122 * 默认只支持叶子节点的Click事件123 */

124 voidonTreeNodeClick(NLevelTreeNode node);125 }126 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值