Android Listview Tree

                      Listview树。效果如下:

                                

                   简要说明实现方案

                      通过List的删除添加以及配合Adapter的notifyDataSetChanged的实现。

                      通过自定义的node中的childNodes来控制隐藏的item

                  

                  简单展示一下核心模块的代码:

                 listview模块:

                

listView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				NodeView nv = (NodeView) view;
				Node node = nv.getData();
				//设置箭头图标
				node.setSelected(!node.isSelected());
				if(node.isSelected()){
					//添加子node对象
					if(node.getChildNodes()!=null&&node.getChildNodes().size()>0){
						NodeUtils.addNodes(nodes, position, node.getChildNodes(),node.getRetractNum());
					}	
				}else{
					//删除node对象
					NodeUtils.deleteNodes(nodes, position, node.getChildNodes());
			}
				adapter.notifyDataSetChanged();
				
				//用户可以定义的方法//
				showMsg("[item所在位置:"+node.getPosition()+"]|"+"[名称:"+node.getName()+"]");//展示数据
			}
		});

               对list的添加删除操作类:

             

package com.example.tree;

import java.util.ArrayList;
import java.util.List;


/**
 * Node助手类    主要提供对node的添加删除操作
 * @author yuliang
 *
 */

public class NodeUtils {
	
	/**
	 * 添加node对象
	 * @param nodes 源数据
	 * @param index 添加开始的索引
	 * @param addDatas 添加的数据
	 * @param retractNum 为添加后的数据添加缩进
	 */
	public static void addNodes(List<Node> nodes,int index,List<Node> addDatas,int retractNum){
		index++;
		retractNum++;
		if(addDatas==null||addDatas.size()==0){
			return ;
		}
		if(nodes==null){
			nodes = new ArrayList<Node>();
		}
		for (int i = 0; i < addDatas.size(); i++) {
			Node n = addDatas.get(i);
			n.setRetractNum(retractNum);
			nodes.add(index+i,n);
		}
	}
	/**
	 * 删除node对象
	 * @param nodes 源数据
	 * @param index 删除开始索引
	 * @param deleteDatas 删除的数据
	 */
	public static void deleteNodes(List<Node> nodes,int index,List<Node> deleteDatas){
		if(deleteDatas==null||deleteDatas.size()==0){
			return ;
		}
		if(nodes==null||nodes.size()==0){
			return ;
		}
		index++;
		int deleteLength = getOpenNodeLength(deleteDatas);
		for (int i = 0; i < deleteLength; i++) {
			nodes.set(i+index, null);
		}
		while (nodes.contains(null)) {
			nodes.remove(null);
		}
		
	}
	
	/**
	 * 获取要删除的node的长度
	 * @param deleteDatas 要删除的node数据对象
	 * @return
	 */
	public static int getOpenNodeLength(List<Node> deleteDatas){
		if(deleteDatas==null||deleteDatas.size()==0){
			return 0;
		}
		int l = deleteDatas.size();
		for (int i = 0; i < deleteDatas.size(); i++) {
			Node n = deleteDatas.get(i);
			int length = 0;
			if(n.isSelected()){
				length = getOpenNodeLength(n.getChildNodes());
			}
			//删除了数据以后改变node的箭头指向
			n.setSelected(false);
			l+=length;
		}
		return l;
	}

}

               源代码下载地址:http://download.csdn.net/detail/woaixinxin123/6552137

               QQ交流群:255825960

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android ListView 是一种常用的 UI 组件,它可以展示一列可滚动的列表项。它在 Android 应用程序中被广泛使用,例如邮件应用程序中的邮件列表、联系人应用程序中的联系人列表等等。 以下是创建 Android ListView 的基本步骤: 1. 在布局文件中添加 ListView 组件: ``` <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2. 创建适配器 Adapter,它将数据与列表项布局进行绑定: ``` public class MyAdapter extends ArrayAdapter<String> { public MyAdapter(Context context, int resource, List<String> objects) { super(context, resource, objects); } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false); } String itemText = getItem(position); TextView textView = convertView.findViewById(R.id.text_view); textView.setText(itemText); return convertView; } } ``` 3. 在 Activity 中设置 ListView 的适配器 Adapter: ``` ListView listView = findViewById(R.id.list_view); List<String> items = new ArrayList<>(); items.add("Item 1"); items.add("Item 2"); items.add("Item 3"); MyAdapter adapter = new MyAdapter(this, R.layout.list_item, items); listView.setAdapter(adapter); ``` 这样就创建了一个简单的 ListView。你可以根据需要自定义列表项布局和适配器 Adapter,以实现更复杂的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值