- 浏览: 2204657 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
效果:
main.xml:
TreeElement.java:
TreeView.java:
下面是用到的两张图片:
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:
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:
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); } } }
下面是用到的两张图片:
发表评论
-
带你深入理解 FLUTTER 中的字体“冷”知识
2020-08-10 23:40 635本篇将带你深入理解 Flutter 开发过程中关于字体和文 ... -
Flutter -自定义日历组件
2020-03-01 17:56 1111颜色文件和屏幕适配的文件 可以自己给定 import ... -
Dart高级(一)——泛型与Json To Bean
2020-02-23 19:13 1005从 Flutter 发布到现在, 越来越多人开始尝试使用 Da ... -
flutter loading、Progress进度条
2020-02-21 17:03 1181Flutter Progress 1 条形无固定值进度条 ... -
Flutter使用Https加载图片
2020-02-21 01:39 1020Flutter使用Https加载图片 使用http加载图片出 ... -
flutter shared_preferences 异步变同步
2020-02-21 00:55 848前言 引用 在开发原生iOS或Native应用时,一般有判断上 ... -
Flutter TextField边框颜色
2020-02-19 21:31 937监听要销毁 myController.dispose(); T ... -
flutter Future的正确用法
2020-02-18 21:55 808在flutter中经常会用到异步任务,dart中异步任务异步处 ... -
记一次Flutter简单粗暴处理HTTPS证书检验方法
2020-02-18 14:13 979最近在做Flutter项目到了遇到一个无解的事情,当使用Ima ... -
flutter 获取屏幕宽度高度 通知栏高度等屏幕信息
2019-07-27 08:39 1344##MediaQuery MediaQuery.of(con ... -
关于flutter RefreshIndicator扩展listview下拉刷新的问题
2019-07-10 19:40 1143当条目过少时listview某些嵌套情况下可能不会滚动(条目 ... -
flutter listview 改变状态的时候一直无限添加
2019-07-10 16:01 791setstate的时候会一直无限的调用listview.bui ... -
Flutter Android端启动白屏问题的解决
2019-07-09 00:51 1526问题描述 Flutter 应用在 Android 端上启动时 ... -
Flutter中SnackBar使用
2019-07-08 23:43 781底部弹出,然后在指定时间后消失。 注意: build(Bui ... -
Flutter 之点击空白区域收起键盘
2019-07-08 18:43 1792点击空白处取消TextField焦点这个需求是非常简单的,在学 ... -
Flutter 弹窗 Dialog ,AlertDialog,IOS风格
2019-07-08 18:04 1383import 'package:flutter/mate ... -
flutter ---TextField 之 输入类型、长度限制
2019-07-08 14:30 2337TextField想要实现输入类型、长度限制需要先引入impo ... -
【flutter 溢出BUG】键盘上显示bottom overflowed by 104 PIXELS
2019-07-08 11:13 1567一开始直接使用Scaffold布局,body:new Colu ... -
解决Flutter项目卡在Initializing gradle...界面的问题
2019-07-07 12:53 880Flutter最近很火,我抽出了一点时间对Flutter进行了 ... -
关于android O 上 NotificationChannel 的一些注意事项
2019-07-04 11:47 941最近在适配android O,遇到个问题,应用中原本有设置界面 ...
相关推荐
"仿qq多层树完美实现"这个项目就是针对这一需求进行的实践,它通过ExpandableListView控件来创建一个类似QQ下拉菜单的交互体验。 首先,我们要理解什么是ExpandableListView。在Android开发中,ExpandableListView...
在这个"Android ExpandableListView双层嵌套实现三级树形菜单"的例子中,我们将深入探讨如何通过扩展这个控件来创建一个包含三层结构的树形菜单。 首先,我们要理解ExpandableListView的基本工作原理。...
在本教程中,我们将探讨如何利用RecyclerView实现一个多层级、无限层级的列表折叠树效果。 首先,我们需要理解RecyclerView的基本工作原理。RecyclerView通过Adapter与数据集进行绑定,Adapter负责将数据项转化为...
3. `TabLayout`配合`PagerAdapter`:`TabLayout`是Android Design Support Library的一部分,用于展示Tab,与`ViewPager`结合可以实现Tab的可视化切换效果。`PagerAdapter`是`ViewPager`的数据适配器,负责为每个Tab...
在本文中,我们将深入探讨如何使用Vue.js框架与Element UI库来实现多层树形菜单。Vue.js是一个轻量级的前端JavaScript框架,以其简洁的API和强大的功能深受开发者喜爱。而Element UI则是一个基于Vue.js的企业级UI...
在处理具有无限层级和多层级折叠树结构的数据时,直接使用嵌套的RecyclerView会导致性能问题,因为每次嵌套都会增加渲染复杂度。本文将介绍如何仅使用一个RecyclerView实现无限层级的折叠树列表。 首先,我们需要...
在Android开发中,构建一个类似QQ好友菜单的多层树形结构是一项常见的需求。这种结构通常用于展现层次分明的数据,例如组织架构、文件系统或菜单导航等。在本篇文章中,我们将深入探讨如何在Android中实现这样的功能...
3. **数据结构与适配器**: 在实现树形菜单时,我们需要一个合适的数据结构来存储菜单及其子菜单。通常,我们可以使用递归的数据模型,如TreeNode类,每个节点包含自身的数据以及对子节点的引用。Adapter将根据这个...
实现多层抽屉效果可能涉及对Android的布局管理器如LinearLayout、RelativeLayout或RecyclerView的使用。特别是RecyclerView,它常用于创建可滚动的列表,适用于展示大量数据或层级结构。 7. **触摸事件处理**: ...
android 树形多选框,真正意义上的 树形多选框,和 web的样式 很类似。 android 树形多选框,真正意义上的 树形多选框,和 web的样式 很类似. 我也整理 了好长时间呢, 体谅我下,谢谢!请 尊重劳动成果,需要有分...
在Android中,我们可以使用`ExpandableListView`或自定义控件来实现树形结构。在这个案例中,我们将采用自定义控件的方式,因为这提供了更多的灵活性和定制化选项。 1. **创建自定义View** - 创建一个自定义的`...
Android使用Kotlin利用Gson解析多层嵌套Json数据
在Android中,我们可以使用ExpandableListView或者自定义ViewGroup实现树形结构。每个节点可以包含子节点,通过递归遍历数据结构,动态生成对应的视图层次。这在处理分层级的数据,如组织架构、菜单系统时非常实用。...
在`RecyclerViewApplication-master`这个项目中,你可以找到相关的代码实现和示例,通过学习和研究,可以加深对Android复杂界面实现的理解,提升你的开发技能。记得在实际项目中根据需求进行调整,保持代码的简洁性...
本示例主要讲解如何使用Android原生组件和一些设计模式来实现这样的功能。 首先,我们要理解"联动菜单"的概念。联动菜单是指在一个菜单的选择项被选中时,会影响并展示与其相关的下一级菜单。在Android中,我们可以...
在Android开发中,全局悬浮按钮(通常称为Float Button或Floating Action Button, FAB)是一种设计模式,用于提供主要的操作或快捷方式。...开发者需要理解Android的多层架构和权限管理,以便正确地实施这样的功能。
在本项目中,“OpenGL的实现多层显示”指的是使用OpenGL和MFC结合,来实现一个具有多层或者多层次显示效果的应用程序。 首先,我们需要理解OpenGL的基础概念。OpenGL是一个跨语言、跨平台的编程接口,它允许程序员...
"Android多级菜单的简单实现"这个主题主要关注如何构建类似于京东分类界面的多层导航结构。这样的菜单通常包含主菜单、子菜单以及可能的孙子菜单,允许用户逐级深入探索内容。 首先,我们需要理解Android菜单的基本...
在Android开发中,为了提供用户友好的交互体验,开发者经常需要实现各种自定义控件以满足特定需求。"Android分层级筛选控件"是一个这样的自定义控件,它旨在模仿大众点评应用中的筛选功能,允许用户按照不同层级的...
在多层树形菜单的实现中,我们通常会用到以下核心概念和技术: 1. **HTML结构**:菜单的基础是HTML结构,通常使用`<ul>`和`<li>`标签来表示层次关系。每一级菜单项可以是`<li>`,而子菜单则作为`<ul>`嵌套在其中。 ...