国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

listview實現的tree樹結構

2019-11-09 17:27:17
字體:
來源:轉載
供稿:網友

轉自:http://www.eoeandroid.com/thread-309141-1-1.html 會更新版本 代碼分享 代碼名稱: myTreeViewDemo 代碼描述: 使用listView實現的樹狀結構 代碼托管地址: - 代碼作者: 阿富

效果圖:

這里寫圖片描述

寫在前面: 首先說明一下,這個只是最基本的樹狀組織結構的展現,我自己ps的連接線o(∩_∩)o ,至于實際使用中,可以對+、-號以及節點圖標和文本加入點擊事件;也可以在節點前加入checkbox等。 在做這個之前,網上也找了很久,找到的比較多的就是這個例子:http://www.apkbus.com/android-83520-1-1.html,但是這個不好看,所以基于這個才有了本例子。上代碼:

TreeElement.java

package com.ccl.util.tree;import java.util.ArrayList;import java.util.List;import android.view.View.OnClickListener;public class TreeElement { PRivate int img_tree_space_n = R.drawable.tree_space_n; private int img_tree_space_y = R.drawable.tree_space_y; private String id;// 節點id private String caption;// 節點標題 private String value;// 節點的值 private int level;// 層級 private TreeElement parent;// 該節點的父節點 private boolean isHasChild;// 是否有子節點 private boolean isExpanded;// 是否處于展開 private ArrayList<TreeElement> childList;// 子節點數組 private boolean isLastSibling;// 是否是同級節點的最后一個 private ArrayList<Integer> spaceList;// 組織結構線條數組 private int position;// 在listview中所處的位置 private OnClickListener captionOnClickListener;// 節點文本點擊事件 public TreeElement() { super(); } public TreeElement(String id, String caption, String value, Boolean isHasChild, OnClickListener captionOnClickListener) { this.id = id; this.caption = caption; this.value = value; this.parent = null; this.level = 0; this.isHasChild = isHasChild; this.isExpanded = false; if (isHasChild) { this.childList = new ArrayList<TreeElement>(); } this.isLastSibling = false; this.setSpaceList(new ArrayList<Integer>()); this.position = 0; this.setCaptionOnClickListener(captionOnClickListener); } // 添加子節點 public void addChild(TreeElement treeElement) { treeElement.parent = this; if (treeElement.getParent() != null && treeElement.getParent().getChildList().size() > 0) {// 將之前的同級節點的置為非最后一個節點 List<TreeElement> siblingList = treeElement.getParent() .getChildList(); treeElement.getParent().getChildList().get(siblingList.size() - 1) .setLastSibling(false); } this.childList.add(treeElement); this.isHasChild = true; treeElement.level = this.level + 1; treeElement.isLastSibling = true; if (this.level > 0) { treeElement.getSpaceList().addAll(this.getSpaceList()); if (this.isLastSibling()) { treeElement.getSpaceList().add(img_tree_space_n); } else { treeElement.getSpaceList().add(img_tree_space_y); } } } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getCaption() { return caption; } public void setCaption(String caption) { this.caption = caption; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public TreeElement getParent() { return parent; } public void setParent(TreeElement parent) { this.parent = parent; } public boolean isHasChild() { return isHasChild; } public void setHasChild(boolean isHasChild) { this.isHasChild = isHasChild; } public boolean isExpanded() { return isExpanded; } public void setExpanded(boolean isExpanded) { this.isExpanded = isExpanded; } public ArrayList<TreeElement> getChildList() { return childList; } public void setChildList(ArrayList<TreeElement> childList) { this.childList = childList; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } public boolean isLastSibling() { return isLastSibling; } public void setLastSibling(boolean isLastSibling) { this.isLastSibling = isLastSibling; } public ArrayList<Integer> getSpaceList() { return spaceList; } public void setSpaceList(ArrayList<Integer> spaceList) { this.spaceList = spaceList; } public int getPosition() { return position; } public void setPosition(int position) { this.position = position; } public OnClickListener getCaptionOnClickListener() { return captionOnClickListener; } public void setCaptionOnClickListener(OnClickListener captionOnClickListener) { this.captionOnClickListener = captionOnClickListener; }}

TreeViewAdapter.java

package com.ccl.util.tree;import java.util.ArrayList;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;public class TreeViewAdapter extends ArrayAdapter<TreeElement> { private int img_leaf = R.drawable.icon_user;// 沒有子節點的節點圖標 private int img_expand = R.drawable.outline_list_expand;// 展開的圖標 private int img_collapse = R.drawable.outline_list_collapse;// 收縮的圖標 private int img_tree_space_1 = R.drawable.tree_space_1;// 連接線 private int img_tree_space_2 = R.drawable.tree_space_2; private Context context; private LayoutInflater mInflater; private ArrayList<TreeElement> treeElementList; private int viewResourceId; public TreeViewAdapter(Context context, int viewResourceId, ArrayList<TreeElement> objects) { super(context, viewResourceId, objects); this.context = context; this.mInflater = LayoutInflater.from(context); this.treeElementList = objects; this.viewResourceId = viewResourceId; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; convertView = mInflater.inflate(viewResourceId, null); holder = new ViewHolder(); holder.caption = (TextView) convertView.findViewById(R.id.caption); holder.icon = (ImageView) convertView.findViewById(R.id.icon); holder.space = (LinearLayout) convertView.findViewById(R.id.space); convertView.setTag(holder); TreeElement treeElement = treeElementList.get(position); int level = treeElement.getLevel(); if (level == 0) {// 根節點 } else { ArrayList<Integer> spaceList = treeElement.getSpaceList(); // 繪制前面的組織架構線條 for (int i = 0; i < spaceList.size(); i++) { ImageView img = new ImageView(context); img.setImageResource(spaceList.get(i)); holder.space.addView(img); } ImageView img = new ImageView(context); // 節點圖標 if (treeElement.isLastSibling()) { img.setImageResource(img_tree_space_2); } else { img.setImageResource(img_tree_space_1); } holder.space.addView(img); } if (treeElement.isHasChild()) { if (treeElement.isExpanded()) { holder.icon.setImageResource(img_expand); } else { holder.icon.setImageResource(img_collapse); } holder.icon.setOnClickListener(new TreeElementIconClickListener( context, treeElementList, this, treeElement.getPosition())); } else { holder.icon.setImageResource(img_leaf); } holder.caption.setText(treeElement.getCaption());// 設置標題 if (treeElement.getCaptionOnClickListener() != null) {// 設置文字的點擊事件 holder.caption.setTag(treeElement.getValue()); holder.caption.setOnClickListener(treeElement .getCaptionOnClickListener()); } return convertView; } class ViewHolder { LinearLayout space; TextView caption; ImageView icon; } public static class TreeElementIconClickListener implements OnClickListener { private Context context; private ArrayList<TreeElement> treeElementList; private TreeViewAdapter treeViewAdapter; private int position; public TreeElementIconClickListener(Context mContext, ArrayList<TreeElement> mTreeElementList, TreeViewAdapter mTreeViewAdapter, int position) { this.context = mContext; this.treeElementList = mTreeElementList; this.treeViewAdapter = mTreeViewAdapter; this.position = position; } @Override public void onClick(View v) { System.out.println("點擊的position:" + position); if (!treeElementList.get(position).isHasChild()) { Toast.makeText(context, treeElementList.get(position).getCaption(), Toast.LENGTH_SHORT).show(); return; } if (treeElementList.get(position).isExpanded()) { treeElementList.get(position).setExpanded(false); TreeElement element = treeElementList.get(position); ArrayList<TreeElement> temp = new ArrayList<TreeElement>(); for (int i = position + 1; i < treeElementList.size(); i++) { if (element.getLevel() >= treeElementList.get(i).getLevel()) { break; } temp.add(treeElementList.get(i)); } treeElementList.removeAll(temp); for (int i = position + 1; i < treeElementList.size(); i++) { System.out.println(treeElementList.get(i).getCaption() + "@@@" + i); treeElementList.get(i).setPosition(i); } treeViewAdapter.notifyDataSetChanged(); } else { TreeElement obj = treeElementList.get(position); obj.setExpanded(true); int level = obj.getLevel(); int nextLevel = level + 1; ArrayList<TreeElement> tempList = obj.getChildList(); for (int i = 0; i < tempList.size(); i++) { TreeElement element = tempList.get(i); element.setLevel(nextLevel); element.setExpanded(false); treeElementList.add(position + i + 1, element); } for (int i = position + 1; i < treeElementList.size(); i++) { System.out.println(treeElementList.get(i).getCaption() + "@@@" + i); treeElementList.get(i).setPosition(i); } treeViewAdapter.notifyDataSetChanged(); } } }}

MainActivity.java

package com.ccl.util.tree;import java.util.ArrayList;import com.ccl.util.tree.TreeViewAdapter.TreeElementIconClickListener;import android.os.Bundle;import android.app.Activity;import android.view.View;import android.view.View.OnClickListener;import android.widget.ListView;import android.widget.Toast;public class MainActivity extends Activity { private ListView lv_tree; private TreeViewAdapter treeViewAdapter; private ArrayList<TreeElement> mRootList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv_tree = (ListView) findViewById(R.id.lv_tree); mRootList = new ArrayList<TreeElement>(); treeViewAdapter = new TreeViewAdapter(this, R.layout.atom_tree, mRootList); lv_tree.setAdapter(treeViewAdapter); OnClickListener myOnClickListener = new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "--" + v.getTag(), Toast.LENGTH_LONG).show(); } }; TreeElement rootElement = new TreeElement("root", "root", "1", true, null); TreeElement treeElement1 = new TreeElement("node1", "節點1", "1", true, null); TreeElement treeElement2 = new TreeElement("node2", "節點2", "2", false, myOnClickListener); TreeElement treeElement3 = new TreeElement("node3", "節點3", "1", false, myOnClickListener); TreeElement treeElement4 = new TreeElement("node3", "節點4", "1", true, myOnClickListener); TreeElement treeElement1_1 = new TreeElement("node14", "節點1_1", "1", true, myOnClickListener); TreeElement treeElement1_2 = new TreeElement("node14", "節點1_2", "1", false, myOnClickListener); TreeElement treeElement1_3 = new TreeElement("node14", "節點1_3", "1", true, myOnClickListener); TreeElement treeElement1_1_1 = new TreeElement("node14", "節點1_1_1", "1", false, myOnClickListener); TreeElement treeElement1_3_1 = new TreeElement("node14", "節點1_3_1", "1", true, myOnClickListener); TreeElement treeElement1_3_2 = new TreeElement("node14", "節點1_3_2", "1", false, myOnClickListener); TreeElement treeElement1_3_1_1 = new TreeElement("node14", "節點1_3_1_1", "1", false, myOnClickListener); TreeElement treeElement4_1 = new TreeElement("node14", "節點4_1", "1", true, myOnClickListener); TreeElement treeElement4_2 = new TreeElement("node14", "節點4_2", "1", false, myOnClickListener); TreeElement treeElement4_3 = new TreeElement("node14", "節點4_3", "1", true, myOnClickListener); TreeElement treeElement4_1_1 = new TreeElement("node14", "節點4_1_1", "1", false, myOnClickListener); TreeElement treeElement4_3_1 = new TreeElement("node14", "節點4_3_1", "1", false, myOnClickListener); mRootList.add(rootElement); rootElement.addChild(treeElement1); rootElement.addChild(treeElement2); rootElement.addChild(treeElement3); rootElement.addChild(treeElement4); treeElement1.addChild(treeElement1_1); treeElement1.addChild(treeElement1_2); treeElement1.addChild(treeElement1_3); treeElement1_1.addChild(treeElement1_1_1); treeElement1_3.addChild(treeElement1_3_1); treeElement1_3.addChild(treeElement1_3_2); treeElement1_3_1.addChild(treeElement1_3_1_1); treeElement4.addChild(treeElement4_1); treeElement4.addChild(treeElement4_2); treeElement4.addChild(treeElement4_3); treeElement4_1.addChild(treeElement4_1_1); treeElement4_3.addChild(treeElement4_3_1); treeViewAdapter.notifyDataSetChanged(); System.out.println(1111); // 展開根目錄 TreeElementIconClickListener mtest = new TreeElementIconClickListener( MainActivity.this, mRootList, treeViewAdapter, 0); mtest.onClick(null); }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宿松县| 上思县| 宣武区| 海安县| 河北省| 长顺县| 广丰县| 乾安县| 闽侯县| 太仆寺旗| 阿尔山市| 卫辉市| 武城县| 平原县| 绥江县| 新乡市| 沙雅县| 大渡口区| 连江县| 垫江县| 布尔津县| 镇宁| 揭东县| 静海县| 平潭县| 石渠县| 集贤县| 桑植县| 什邡市| 云龙县| 陆良县| 万州区| 萨迦县| 新巴尔虎左旗| 屏边| 屯留县| 永善县| 吉林市| 岗巴县| 房山区| 都昌县|