• Android 多层树完美实现


    效果: 
     

    main.xml: 

    <?xml version="1.0" encoding="utf-8"?>  
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation
    ="horizontal" android:layout_width="fill_parent"
    android:layout_height
    ="wrap_content">
    <ImageView android:id="@+id/icon" android:layout_width="wrap_content"
    android:layout_height
    ="fill_parent" android:layout_marginRight="6.0dip"
    android:layout_alignParentTop
    ="true" android:layout_alignParentBottom="true" />
    <!--<TextView android:id="@+id/text" android:layout_gravity="center_vertical"
    android:layout_weight="1.0" android:layout_height="wrap_content" android:layout_width="0dip"
    android:textAppearance="?android:attr/textAppearanceMedium" android:singleLine="true"
    android:textColor="#ffffff" />
    -->
    <TextView android:textAppearance="?android:textAppearanceMedium"
    android:gravity
    ="center_vertical" android:id="@+id/text"
    android:textColor
    ="#ffffff" android:layout_width="fill_parent"
    android:layout_height
    ="fill_parent" android:singleLine="true"
    android:layout_toRightOf
    ="@id/icon" android:layout_alignParentTop="true"
    android:layout_alignParentBottom
    ="true" />
    </RelativeLayout>
     


    TreeElement.java: 

    Java代码 
    package com.iaiai;  

    import java.util.ArrayList;

    /**
    *
    * <p>
    * Title: TreeElement.java
    * </p>
    * <p>
    * E-Mail: 176291935@qq.com
    * </p>
    * <p>
    * QQ: 176291935
    * </p>
    * <p>
    * Http: iaiai.iteye.com
    * </p>
    * <p>
    * Create time: 2011-8-20
    * </p>
    *
    *
    @author 丸子
    *
    @version 0.0.1
    */
    public class TreeElement {

    private String id;
    private String outlineTitle;
    private boolean mhasParent;
    private boolean mhasChild;
    private TreeElement parent;
    private int level;
    private ArrayList<TreeElement> childList = new ArrayList<TreeElement>();

    public String getId() {
    return id;
    }

    public void setId(String id) {
    this.id = id;
    }

    public String getOutlineTitle() {
    return outlineTitle;
    }

    public void setOutlineTitle(String outlineTitle) {
    this.outlineTitle = outlineTitle;
    }

    public boolean isMhasParent() {
    return mhasParent;
    }

    public void setMhasParent(boolean mhasParent) {
    this.mhasParent = mhasParent;
    }

    public boolean isMhasChild() {
    return mhasChild;
    }

    public void setMhasChild(boolean mhasChild) {
    this.mhasChild = mhasChild;
    }

    public int getLevel() {
    return level;
    }

    public void setLevel(int level) {
    this.level = level;
    }

    public boolean isExpanded() {
    return expanded;
    }

    public void setExpanded(boolean expanded) {
    this.expanded = expanded;
    }

    public ArrayList<TreeElement> getChildList() {
    return childList;
    }

    public TreeElement getParent() {
    return parent;
    }

    public void setParent(TreeElement parent) {
    this.parent = parent;
    }

    // private OutlineElement outlineElement;
    private boolean expanded;

    public void addChild(TreeElement c) {
    this.childList.add(c);
    this.mhasParent = false;
    this.mhasChild = true;
    c.parent = this;
    c.level = this.level + 1;

    }

    public TreeElement(String id, String title) {
    super();
    this.id = id;
    this.outlineTitle = title;
    this.level = 0;
    this.mhasParent = true;
    this.mhasChild = false;
    this.parent = null;
    }

    public TreeElement(String id, String outlineTitle, boolean mhasParent,
    boolean mhasChild, TreeElement parent, int level, boolean expanded) {
    super();
    this.id = id;
    this.outlineTitle = outlineTitle;
    this.mhasParent = mhasParent;
    this.mhasChild = mhasChild;
    this.parent = parent;
    if (parent != null) {
    this.parent.getChildList().add(this);
    }
    this.level = level;
    this.expanded = expanded;
    }

    }


    TreeView.java: 

    Java代码 
    package com.iaiai;  

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

    import android.app.ListActivity;
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;

    /**
    *
    * <p>
    * Title: TreeView.java
    * </p>
    * <p>
    * E-Mail: 176291935@qq.com
    * </p>
    * <p>
    * QQ: 176291935
    * </p>
    * <p>
    * Http: iaiai.iteye.com
    * </p>
    * <p>
    * Create time: 2011-8-20
    * </p>
    *
    *
    @author 丸子
    *
    @version 0.0.1
    */
    public class TreeView extends ListActivity {
    private ArrayList<TreeElement> mPdfOutlinesCount = new ArrayList<TreeElement>();
    private TreeViewAdapter treeViewAdapter = null;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    initialData();
    treeViewAdapter = new TreeViewAdapter(this, R.layout.main,
    mPdfOutlinesCount);
    setListAdapter(treeViewAdapter);
    registerForContextMenu(getListView());
    }

    private void initialData() {
    TreeElement element1 = new TreeElement("01", "关键类");
    TreeElement element2 = new TreeElement("02", "应用程序组件");
    TreeElement element3 = new TreeElement("03", "Activity和任务");
    TreeElement element4 = new TreeElement("04", "激活组件:intent");
    TreeElement element5 = new TreeElement("05", "关闭组件");
    TreeElement element6 = new TreeElement("06", "manifest文件");
    TreeElement element7 = new TreeElement("07", "Intent过滤器");
    TreeElement element8 = new TreeElement("08", "Affinity(吸引力)和新任务");
    TreeElement element9 = new TreeElement("09", "加载模式");
    TreeElement element10 = new TreeElement("10", "加载模式孩子1");
    TreeElement element11 = new TreeElement("11", "加载模式孩子2");
    TreeElement element12 = new TreeElement("12", "加载模式孩子2的孩子1");
    TreeElement element13 = new TreeElement("13", "加载模式孩子2的孩子2");
    TreeElement element14 = new TreeElement("14", "加载模式孩子1的孩子1");
    TreeElement element15 = new TreeElement("15", "加载模式孩子1的孩子2");
    TreeElement element16 = new TreeElement("16", "加载模式孩子1的孩子3");
    TreeElement element17 = new TreeElement("17", "加载模式孩子1的孩子4");
    TreeElement element18 = new TreeElement("18", "加载模式孩子1的孩子5");
    TreeElement element19 = new TreeElement("19", "加载模式孩子1的孩子6");

    mPdfOutlinesCount.add(element1);
    mPdfOutlinesCount.add(element2);
    mPdfOutlinesCount.add(element9);
    element2.addChild(element3);
    element1.addChild(element4);
    element1.addChild(element5);
    element1.addChild(element6);
    element1.addChild(element7);
    element7.addChild(element8);
    element9.addChild(element10);
    element9.addChild(element11);
    element11.addChild(element12);
    element11.addChild(element13);
    element10.addChild(element14);
    element10.addChild(element15);
    element10.addChild(element16);
    element10.addChild(element17);
    element10.addChild(element18);
    element10.addChild(element19);

    }

    @SuppressWarnings("unchecked")
    private class TreeViewAdapter extends ArrayAdapter {
    public TreeViewAdapter(Context context, int textViewResourceId,
    List objects) {
    super(context, textViewResourceId, objects);
    mInflater = LayoutInflater.from(context);
    mfilelist = objects;
    mIconCollapse = BitmapFactory.decodeResource(
    context.getResources(), R.drawable.outline_list_collapse);
    mIconExpand = BitmapFactory.decodeResource(context.getResources(),
    R.drawable.outline_list_expand);
    }

    private LayoutInflater mInflater;
    private List<TreeElement> mfilelist;
    private Bitmap mIconCollapse;
    private Bitmap mIconExpand;

    public int getCount() {
    return mfilelist.size();
    }

    public Object getItem(int position) {
    return position;
    }

    public long getItemId(int position) {
    return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    /* if (convertView == null) { */
    convertView = mInflater.inflate(R.layout.main, 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(); }
    */

    final TreeElement obj = mfilelist.get(position);

    holder.text.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    Log.i("TreeView", "obj.id:" + obj.getId());
    }
    });

    int level = obj.getLevel();
    holder.icon.setPadding(25 * (level + 1),
    holder.icon.getPaddingTop(), 0,
    holder.icon.getPaddingBottom());
    holder.text.setText(obj.getOutlineTitle());
    if (obj.isMhasChild() && (obj.isExpanded() == false)) {
    holder.icon.setImageBitmap(mIconCollapse);
    } else if (obj.isMhasChild() && (obj.isExpanded() == true)) {
    holder.icon.setImageBitmap(mIconExpand);
    } else if (!obj.isMhasChild()) {
    holder.icon.setImageBitmap(mIconCollapse);
    holder.icon.setVisibility(View.INVISIBLE);
    }
    return convertView;
    }

    class ViewHolder {
    TextView text;
    ImageView icon;

    }
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    Log.i("TreeView", "position:" + position);
    if (!mPdfOutlinesCount.get(position).isMhasChild()) {
    Toast.makeText(this, mPdfOutlinesCount.get(position)
    .getOutlineTitle(), 2000);
    /*
    * int pageNumber; Intent i = getIntent(); element element =
    * mPdfOutlinesCount .get(position); pageNumber =
    * element.getOutlineElement().pageNumber; if (pageNumber <= 0) {
    * String name = element.getOutlineElement().destName; pageNumber =
    * idocviewer.getPageNumberForNameForOutline(name);
    * element.getOutlineElement().pageNumber = pageNumber;
    * element.getOutlineElement().destName = null; }
    * i.putExtra("PageNumber", pageNumber); setResult(RESULT_OK, i);
    * finish();
    */

    return;
    }

    if (mPdfOutlinesCount.get(position).isExpanded()) {
    mPdfOutlinesCount.get(position).setExpanded(false);
    TreeElement element = mPdfOutlinesCount.get(position);
    ArrayList<TreeElement> temp = new ArrayList<TreeElement>();

    for (int i = position + 1; i < mPdfOutlinesCount.size(); i++) {
    if (element.getLevel() >= mPdfOutlinesCount.get(i).getLevel()) {
    break;
    }
    temp.add(mPdfOutlinesCount.get(i));
    }

    mPdfOutlinesCount.removeAll(temp);

    treeViewAdapter.notifyDataSetChanged();
    /*
    * fileExploreAdapter = new TreeViewAdapter(this, R.layout.outline,
    * mPdfOutlinesCount);
    */

    // setListAdapter(fileExploreAdapter);

    } else {
    TreeElement obj = mPdfOutlinesCount.get(position);
    obj.setExpanded(true);
    int level = obj.getLevel();
    int nextLevel = level + 1;

    for (TreeElement element : obj.getChildList()) {
    element.setLevel(nextLevel);
    element.setExpanded(false);
    mPdfOutlinesCount.add(position + 1, element);

    }
    treeViewAdapter.notifyDataSetChanged();
    /*
    * fileExploreAdapter = new TreeViewAdapter(this, R.layout.outline,
    * mPdfOutlinesCount);
    */

    // setListAdapter(fileExploreAdapter);
    }
    }

    }
    
    
    转自:http://www.iteye.com/topic/1113720
  • 相关阅读:
    JS 循环遍历JSON数据 分类: JS技术 JS JQuery 2010-12-01 13:56 43646人阅读 评论(5) 收藏 举报 jsonc JSON数据如:{&quot;options&quot;:&quot;[{
    CLLocation的属性以及使用的解释
    单片机小白学步系列(十六) 单片机/计算机系统概述:模块化思想
    关于android中的单位(dp、sp)
    手动脱RLPack壳实战
    集成环信时遇到的问题file not found: libEaseMobClientSDK.a
    Cocos2dx 小技巧(九)现成的粒子特效
    设计模式
    2011 ACM-ICPC 成都赛区A题 Alice and Bob (博弈动规)
    hdu 2544 最短路(SPFA算法)
  • 原文地址:https://www.cnblogs.com/shanzei/p/2412759.html
Copyright © 2020-2023  润新知