效果:


main.xml:

Java代码
  1. <?xmlversion= "1.0" encoding= "utf-8" ?>
  2. <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="horizontal" android:layout_width= "fill_parent"
  4. android:layout_height="wrap_content" >
  5. <ImageViewandroid:id="@+id/icon" android:layout_width= "wrap_content"
  6. android:layout_height="fill_parent" android:layout_marginRight= "6.0dip"
  7. android:layout_alignParentTop="true" android:layout_alignParentBottom= "true" />
  8. <!--<TextViewandroid:id="@+id/text" android:layout_gravity= "center_vertical"
  9. android:layout_weight="1.0" android:layout_height= "wrap_content" android:layout_width= "0dip"
  10. android:textAppearance="?android:attr/textAppearanceMedium" android:singleLine= "true"
  11. android:textColor="#ffffff" />-->
  12. <TextViewandroid:textAppearance="?android:textAppearanceMedium"
  13. android:gravity="center_vertical" android:id= "@+id/text"
  14. android:textColor="#ffffff" android:layout_width= "fill_parent"
  15. android:layout_height="fill_parent" android:singleLine= "true"
  16. android:layout_toRightOf="@id/icon" android:layout_alignParentTop= "true"
  17. android:layout_alignParentBottom="true" />
  18. </RelativeLayout>



TreeElement.java:

Java代码
  1. package com.iaiai;
  2. import java.util.ArrayList;
  3. /**
  4. *
  5. *<p>
  6. *Title:TreeElement.java
  7. *</p>
  8. *<p>
  9. *E-Mail:176291935@qq.com
  10. *</p>
  11. *<p>
  12. *QQ:176291935
  13. *</p>
  14. *<p>
  15. *Http:iaiai.iteye.com
  16. *</p>
  17. *<p>
  18. *Createtime:2011-8-20
  19. *</p>
  20. *
  21. *@author丸子
  22. *@version0.0.1
  23. */
  24. public class TreeElement{
  25. private Stringid;
  26. private StringoutlineTitle;
  27. private boolean mhasParent;
  28. private boolean mhasChild;
  29. private TreeElementparent;
  30. private int level;
  31. private ArrayList<TreeElement>childList= new ArrayList<TreeElement>();
  32. public StringgetId(){
  33. return id;
  34. }
  35. public void setId(Stringid){
  36. this .id=id;
  37. }
  38. public StringgetOutlineTitle(){
  39. return outlineTitle;
  40. }
  41. public void setOutlineTitle(StringoutlineTitle){
  42. this .outlineTitle=outlineTitle;
  43. }
  44. public boolean isMhasParent(){
  45. return mhasParent;
  46. }
  47. public void setMhasParent( boolean mhasParent){
  48. this .mhasParent=mhasParent;
  49. }
  50. public boolean isMhasChild(){
  51. return mhasChild;
  52. }
  53. public void setMhasChild( boolean mhasChild){
  54. this .mhasChild=mhasChild;
  55. }
  56. public int getLevel(){
  57. return level;
  58. }
  59. public void setLevel( int level){
  60. this .level=level;
  61. }
  62. public boolean isExpanded(){
  63. return expanded;
  64. }
  65. public void setExpanded( boolean expanded){
  66. this .expanded=expanded;
  67. }
  68. public ArrayList<TreeElement>getChildList(){
  69. return childList;
  70. }
  71. public TreeElementgetParent(){
  72. return parent;
  73. }
  74. public void setParent(TreeElementparent){
  75. this .parent=parent;
  76. }
  77. //privateOutlineElementoutlineElement;
  78. private boolean expanded;
  79. public void addChild(TreeElementc){
  80. this .childList.add(c);
  81. this .mhasParent= false ;
  82. this .mhasChild= true ;
  83. c.parent=this ;
  84. c.level=this .level+ 1 ;
  85. }
  86. public TreeElement(Stringid,Stringtitle){
  87. super ();
  88. this .id=id;
  89. this .outlineTitle=title;
  90. this .level= 0 ;
  91. this .mhasParent= true ;
  92. this .mhasChild= false ;
  93. this .parent= null ;
  94. }
  95. public TreeElement(Stringid,StringoutlineTitle, boolean mhasParent,
  96. boolean mhasChild,TreeElementparent, int level, boolean expanded){
  97. super ();
  98. this .id=id;
  99. this .outlineTitle=outlineTitle;
  100. this .mhasParent=mhasParent;
  101. this .mhasChild=mhasChild;
  102. this .parent=parent;
  103. if (parent!= null ){
  104. this .parent.getChildList().add( this );
  105. }
  106. this .level=level;
  107. this .expanded=expanded;
  108. }
  109. }



TreeView.java:

Java代码
  1. package com.iaiai;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.app.ListActivity;
  5. import android.content.Context;
  6. import android.graphics.Bitmap;
  7. import android.graphics.BitmapFactory;
  8. import android.os.Bundle;
  9. import android.util.Log;
  10. import android.view.LayoutInflater;
  11. import android.view.View;
  12. import android.view.ViewGroup;
  13. import android.widget.ArrayAdapter;
  14. import android.widget.ImageView;
  15. import android.widget.ListView;
  16. import android.widget.TextView;
  17. import android.widget.Toast;
  18. /**
  19. *
  20. *<p>
  21. *Title:TreeView.java
  22. *</p>
  23. *<p>
  24. *E-Mail:176291935@qq.com
  25. *</p>
  26. *<p>
  27. *QQ:176291935
  28. *</p>
  29. *<p>
  30. *Http:iaiai.iteye.com
  31. *</p>
  32. *<p>
  33. *Createtime:2011-8-20
  34. *</p>
  35. *
  36. *@author丸子
  37. *@version0.0.1
  38. */
  39. public class TreeView extends ListActivity{
  40. private ArrayList<TreeElement>mPdfOutlinesCount= new ArrayList<TreeElement>();
  41. private TreeViewAdaptertreeViewAdapter= null ;
  42. /**Calledwhentheactivityisfirstcreated.*/
  43. @Override
  44. public void onCreate(BundlesavedInstanceState){
  45. super .onCreate(savedInstanceState);
  46. initialData();
  47. treeViewAdapter=new TreeViewAdapter( this ,R.layout.main,
  48. mPdfOutlinesCount);
  49. setListAdapter(treeViewAdapter);
  50. registerForContextMenu(getListView());
  51. }
  52. private void initialData(){
  53. TreeElementelement1=new TreeElement( "01" , "关键类" );
  54. TreeElementelement2=new TreeElement( "02" , "应用程序组件" );
  55. TreeElementelement3=new TreeElement( "03" , "Activity和任务" );
  56. TreeElementelement4=new TreeElement( "04" , "激活组件:intent" );
  57. TreeElementelement5=new TreeElement( "05" , "关闭组件" );
  58. TreeElementelement6=new TreeElement( "06" , "manifest文件" );
  59. TreeElementelement7=new TreeElement( "07" , "Intent过滤器" );
  60. TreeElementelement8=new TreeElement( "08" , "Affinity(吸引力)和新任务" );
  61. TreeElementelement9=new TreeElement( "09" , "加载模式" );
  62. TreeElementelement10=new TreeElement( "10" , "加载模式孩子1" );
  63. TreeElementelement11=new TreeElement( "11" , "加载模式孩子2" );
  64. TreeElementelement12=new TreeElement( "12" , "加载模式孩子2的孩子1" );
  65. TreeElementelement13=new TreeElement( "13" , "加载模式孩子2的孩子2" );
  66. TreeElementelement14=new TreeElement( "14" , "加载模式孩子1的孩子1" );
  67. TreeElementelement15=new TreeElement( "15" , "加载模式孩子1的孩子2" );
  68. TreeElementelement16=new TreeElement( "16" , "加载模式孩子1的孩子3" );
  69. TreeElementelement17=new TreeElement( "17" , "加载模式孩子1的孩子4" );
  70. TreeElementelement18=new TreeElement( "18" , "加载模式孩子1的孩子5" );
  71. TreeElementelement19=new TreeElement( "19" , "加载模式孩子1的孩子6" );
  72. mPdfOutlinesCount.add(element1);
  73. mPdfOutlinesCount.add(element2);
  74. mPdfOutlinesCount.add(element9);
  75. element2.addChild(element3);
  76. element1.addChild(element4);
  77. element1.addChild(element5);
  78. element1.addChild(element6);
  79. element1.addChild(element7);
  80. element7.addChild(element8);
  81. element9.addChild(element10);
  82. element9.addChild(element11);
  83. element11.addChild(element12);
  84. element11.addChild(element13);
  85. element10.addChild(element14);
  86. element10.addChild(element15);
  87. element10.addChild(element16);
  88. element10.addChild(element17);
  89. element10.addChild(element18);
  90. element10.addChild(element19);
  91. }
  92. @SuppressWarnings ( "unchecked" )
  93. private class TreeViewAdapter extends ArrayAdapter{
  94. public TreeViewAdapter(Contextcontext, int textViewResourceId,
  95. Listobjects){
  96. super (context,textViewResourceId,objects);
  97. mInflater=LayoutInflater.from(context);
  98. mfilelist=objects;
  99. mIconCollapse=BitmapFactory.decodeResource(
  100. context.getResources(),R.drawable.outline_list_collapse);
  101. mIconExpand=BitmapFactory.decodeResource(context.getResources(),
  102. R.drawable.outline_list_expand);
  103. }
  104. private LayoutInflatermInflater;
  105. private List<TreeElement>mfilelist;
  106. private BitmapmIconCollapse;
  107. private BitmapmIconExpand;
  108. public int getCount(){
  109. return mfilelist.size();
  110. }
  111. public ObjectgetItem( int position){
  112. return position;
  113. }
  114. public long getItemId( int position){
  115. return position;
  116. }
  117. public ViewgetView( int position,ViewconvertView,ViewGroupparent){
  118. ViewHolderholder;
  119. /*if(convertView==null){*/
  120. convertView=mInflater.inflate(R.layout.main,null );
  121. holder=new ViewHolder();
  122. holder.text=(TextView)convertView.findViewById(R.id.text);
  123. holder.icon=(ImageView)convertView.findViewById(R.id.icon);
  124. convertView.setTag(holder);
  125. /*
  126. *}else{holder=(ViewHolder)convertView.getTag();}
  127. */
  128. final TreeElementobj=mfilelist.get(position);
  129. holder.text.setOnClickListener(new View.OnClickListener(){
  130. @Override
  131. public void onClick(Viewv){
  132. Log.i("TreeView" , "obj.id:" +obj.getId());
  133. }
  134. });
  135. int level=obj.getLevel();
  136. holder.icon.setPadding(25 *(level+ 1 ),
  137. holder.icon.getPaddingTop(),0 ,
  138. holder.icon.getPaddingBottom());
  139. holder.text.setText(obj.getOutlineTitle());
  140. if (obj.isMhasChild()&&(obj.isExpanded()== false )){
  141. holder.icon.setImageBitmap(mIconCollapse);
  142. }else if (obj.isMhasChild()&&(obj.isExpanded()== true )){
  143. holder.icon.setImageBitmap(mIconExpand);
  144. }else if (!obj.isMhasChild()){
  145. holder.icon.setImageBitmap(mIconCollapse);
  146. holder.icon.setVisibility(View.INVISIBLE);
  147. }
  148. return convertView;
  149. }
  150. class ViewHolder{
  151. TextViewtext;
  152. ImageViewicon;
  153. }
  154. }
  155. @Override
  156. protected void onListItemClick(ListViewl,Viewv, int position, long id){
  157. super .onListItemClick(l,v,position,id);
  158. Log.i("TreeView" , "position:" +position);
  159. if (!mPdfOutlinesCount.get(position).isMhasChild()){
  160. Toast.makeText(this ,mPdfOutlinesCount.get(position)
  161. .getOutlineTitle(),2000 );
  162. /*
  163. *intpageNumber;Intenti=getIntent();elementelement=
  164. *mPdfOutlinesCount.get(position);pageNumber=
  165. *element.getOutlineElement().pageNumber;if(pageNumber<=0){
  166. *Stringname=element.getOutlineElement().destName;pageNumber=
  167. *idocviewer.getPageNumberForNameForOutline(name);
  168. *element.getOutlineElement().pageNumber=pageNumber;
  169. *element.getOutlineElement().destName=null;}
  170. *i.putExtra("PageNumber",pageNumber);setResult(RESULT_OK,i);
  171. *finish();
  172. */
  173. return ;
  174. }
  175. if (mPdfOutlinesCount.get(position).isExpanded()){
  176. mPdfOutlinesCount.get(position).setExpanded(false );
  177. TreeElementelement=mPdfOutlinesCount.get(position);
  178. ArrayList<TreeElement>temp=new ArrayList<TreeElement>();
  179. for ( int i=position+ 1 ;i<mPdfOutlinesCount.size();i++){
  180. if (element.getLevel()>=mPdfOutlinesCount.get(i).getLevel()){
  181. break ;
  182. }
  183. temp.add(mPdfOutlinesCount.get(i));
  184. }
  185. mPdfOutlinesCount.removeAll(temp);
  186. treeViewAdapter.notifyDataSetChanged();
  187. /*
  188. *fileExploreAdapter=newTreeViewAdapter(this,R.layout.outline,
  189. *mPdfOutlinesCount);
  190. */
  191. //setListAdapter(fileExploreAdapter);
  192. }else {
  193. TreeElementobj=mPdfOutlinesCount.get(position);
  194. obj.setExpanded(true );
  195. int level=obj.getLevel();
  196. int nextLevel=level+ 1 ;
  197. for (TreeElementelement:obj.getChildList()){
  198. element.setLevel(nextLevel);
  199. element.setExpanded(false );
  200. mPdfOutlinesCount.add(position+1 ,element);
  201. }
  202. treeViewAdapter.notifyDataSetChanged();
  203. /*
  204. *fileExploreAdapter=newTreeViewAdapter(this,R.layout.outline,
  205. *mPdfOutlinesCount);
  206. */
  207. //setListAdapter(fileExploreAdapter);
  208. }
  209. }
  210. }

更多相关文章

  1. android 实现图片加载效果
  2. Android语音识别功能使用
  3. Android(安卓)浏览网页
  4. Android(安卓)ListView异步加载图片
  5. Android(安卓)WebView 加载网页遇到的问题
  6. 【Android】Activity全屏设置
  7. Android(安卓)自定义加载view(菊花效果)
  8. 安卓面试中遇到的问题2017.2
  9. Android(安卓)加载assets中的资源文件实例代码

随机推荐

  1. Android示例应用:开源框架Glide的使用
  2. android studio 生成 aar release 包 步
  3. Android(安卓)jni build 多个shared libr
  4. 自定义ViewGroup获取子View参数
  5. Cocos2d-x 3.7 Android&iOS开发环境搭建
  6. Android(安卓)Asset目录下的Apk文件的复
  7. android之xml定义数组
  8. Android ORM 框架:GreenDao 使用详解(基础
  9. Android随VierPager滑动的导航栏
  10. Android(安卓)记事本-Demo