Android零散

2016-03-13

Android零散

ListView中嵌套GridView

要实现分组列表这样的效果:点击ListView中的分组名称,即展开此分组显示其包含的项目。
使用ExpandableList可以实现展开这样的效果,如果对于列表中的每个可点击的标题View需要更多的定制,而不是简单的展开——例如点击全选等,那么可使用ListView嵌套GridView组合实现,ListView中嵌套的GridView应该是完全展开的——内外层都滑动的交互体验很别扭,而且实现起来麻烦。而对应的GridView可以使用setVisibility为GONE、VISIBLE这样的方式进行暂时的隐藏和打开。
为了使GridView在ListView中完全展开,那么它的height应该是个具体的数值,这里让GridView始终保持其内容的高度即可:

public class UnfoldGridView extends GridView {    public UnfoldGridView(Context context) {        super(context);    }

    public UnfoldGridView(Context context, AttributeSet attrs) {        super(context, attrs);    }

    public UnfoldGridView(Context context, AttributeSet attrs, int defStyle)    {        super(context, attrs, defStyle);    }

    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int expandSpec = View.MeasureSpec.makeMeasureSpec(900000, View.MeasureSpec.AT_MOST);        super.onMeasure(widthMeasureSpec, expandSpec);    }}

makeMeasureSpec中给一个很大的size,然后使用AtMost使其保持够大即可。

setAdapter和addHeaderView、addFooterView

可以使用addHeaderView和addFooterView来为ListView添加首尾的个性视图。两者都可以多次调用来添加多个header和footer。
这两个方法需要注意和setAdapter的调用顺序:

When first introduced, this method could only be called before setting the adapter with setAdapter(ListAdapter). Starting with KITKAT, this method may be called at any time. If the ListView‘s adapter does not extend HeaderViewListAdapter, it will be wrapped with a supporting instance of WrapperListAdapter.

所以,为了保持兼容性,无论是在API 19之前或之后,保持addHeaderView和addFooterView在setAdapter之前执行。addHeaderView如果在setAdapter之后执行,那么在API 19之前的版本直接回报错。而addFooterView在setAdapter之后执行的话,虽然不引起运行时错误——但是更迷惑的是——添加的视图是看不到了。
这个是和API Level相关的一个问题,算是谷歌的坑吧。

ListView的getItemViewType

一个页面中当要连续显示多个不同的列表时,或者间隔性地显示多种不同的View时,需要用到ListView的两个方法:

@Overridepublic int getItemViewType(int position) {    return super.getItemViewType(position);}@Overridepublic int getViewTypeCount() {    return super.getViewTypeCount();}

getItemViewType方法需要注意的是,其定义的ITEM_XX这样的整数常量,其取值范围需要在0~getViewTypeCount()-1之间,下面是getItemViewType返回值的描述:

An integer representing the type of View. Two views should share the same type if one can be converted to the other in getView. Note: Integers must be in the range 0 to getViewTypeCount - 1. IGNORE_ITEM_VIEW_TYPE can also be returned.

在区间外的viewType值,会引起运行时的indexoutofboundexception错误,这个是ListView自身的限制。

startActivityForResult和活动的launchMode

Activity_A启动Activity_B后,需要Activity_B在完成操作后返回的一些数据:

//Activity_A中private final int REQUEST_CODE_EDIT_ITEM = 2;public void startPageBForEdit() {    Intent start = new Intent(this, EditActivity.class);    startActivityForResult(start, REQUEST_CODE_EDIT_ITEM);}
//Activity_B中public void setResult() {    Intent data = new Intent();    data.putExtra("itemDelete", true);    setResult(RESULT_OK, data);}

在Activity_A中接收数据:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (requestCode == REQUEST_CODE_EDIT_ITEM && resultCode == RESULT_OK) {        //成功返回结果了    }}

上面是典型的代码片段,需要注意的是:对于对应的目标Activity启动模式(在manifest中)指定为singleTask和singleInstance的Activity,使用startActivityForResult后,当前Activity的onActivityResult会立即执行,其resultCode为RESULT_CANCEL,并且data为null.
这个从启动模式的设计上就可以理解,假设依次打开了A、B两个Activity,其中A指定为singleTask,那么在B中使用startActivityForResult打开A显然是没有意义的,因为B会从活动栈出栈,直接被destroy了。
所以,只有standard和singleTop这样的启动模式的Activity,使用startActivityForResult打开它们才可以有效的返回数据给上一个Activity,如果遇到这样的需求,需要设计好多个Activity之间的跳转关系。传递数据的方式是很多的。

Service的onStartCommand的返回值

@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {    return super.onStartCommand(intent, flags, startId);}

onStartCommand中的flags和其返回值都和Service的启动紧密相关。Service的定位就像是没有View的Activity,应用长期后台的情况下Service可能会暂时性被杀死(随着进程被杀死)——之后又会再次被系统启动。
每次调用startService来执行一些动作时,onStartCommand被执行,其intent参数代表分发过来的意图描述数据(intnt就是一个携带有关“要做什么”的信息对象)。
使用startService来启动一个已经运行中的,正在启动中的,重新启动中的Service时,系统会在这些不同的Service状态下对onStartCommand的调用产生一些差异。
//待续。。。

时间: 2024-08-10 23:13:48

Android零散的相关文章

Android 零散知识点整理

为什么Android的更新试图操作必须在主线程中进行? 这是因为Android系统中的视图组件并不是线程安全的.通常应该让主线程负责创建.显示和更新UI,启动子线程,停止子线程.让子线程完成计算并向主线程发出更新UI的消息,让主线程来更新UI.这就促使Android中产生了Handler机制. 如何更改Android Studio编译所采用的API版本? 通过module setting 的Flavors选项卡进行Android API编译版本的更改: 小米手机更改应用程序图标后,桌面上图标没有

Android零散收集

一.android提供了以下几种方法,用于实现后台线程与UI线程的交互 1.handler 2.Activity.runOnUIThread(Runnable) 3.View.Post(Runnable) 4.View.PostDelayed(Runnabe,long) 5.AsyncTask

Android UI 零散知识汇总。

一.界面变暗. WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = 0.5f; lp.dimAmount = 1f; getWindow().setAttributes(lp); 如果想变回来: WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = 1f; lp.dimAmount = 1f; getWindow()

Google 发布 Android 性能优化典范

2015年伊始,Google发布了关于Android性能优化典范的专题, 一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有关性能问题的底层工作原理,同时也介绍了如何通过工具来找出性能问题以及提升性能的建议.主要从三个 方面展开,Android的渲染机制,内存与GC,电量优化.下面是对这些问题和建议的总结梳理. 0)Render Performance 大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能.从设计

Android基础入门教程——8.3.16 Canvas API详解(Part 1)

Android基础入门教程--8.3.16 Canvas API详解(Part 1) 标签(空格分隔): Android基础入门教程 本节引言: 前面我们花了13小节详细地讲解了Android中Paint类大部分常用的API,本节开始我们来讲解 Canvas(画板)的一些常用API,我们在Android基础入门教程--8.3.1 三个绘图工具类详解 中已经列出了我们可供调用的一些方法,我们分下类: drawXxx方法族:以一定的坐标值在当前画图区域画图,另外图层会叠加, 即后面绘画的图层会覆盖前

Android GreenDAO3.0——介绍

引言 最近,学东西比较零散,各种知识混杂,于是记下学习记录,免得又忘了. 官方网址:http://greenrobot.org/greendao/documentation/introduction/ 首先介绍一下什么是greenDAO,在java object 对象与SQLite数据库之间加入GreenDAO,使得我们的应用程序不直接操作数据库,而是调用greenDAO提供的接口完成数据库操作. 这样做的好处是可以避免我们写大量的数据库操作代码,避免因为疲劳犯下一些低级的错误. GreenDA

android源码大放送(实战开发必备),免费安卓demo源码,例子大全文件详细列表

免费安卓demo源码,例子大全文件详细列表 本列表源码永久免费下载地址:http://www.jiandaima.com/blog/android-demo 卷 yunpan 的文件夹 PATH 列表 卷序列号为 0000-73EC E:. │ jiandaima.com文件列表生成.bat │ 例子大全说明.txt │ 本例子永久更新地址~.url │ 目录列表2016.03.10更新.txt │ ├─前台界面 │ ├─3D标签云卡片热门 │ │ Android TagCloudView云标签

android内存优化大全_上

转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在ANDROID开发中遇到关于内存问题,或者马上要参加面试,或者就是单纯的学习或复习一下内存相关知识,都欢迎阅读.(本文最后我会尽量列出所参考的文章). 内存简介: RAM(random acc

android内存优化大全_中

转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在ANDROID开发中遇到关于内存问题,或者马上要参加面试,或者就是单纯的学习或复习一下内存相关知识,都欢迎阅读.(本文最后我会尽量列出所参考的文章). OOM: 内存泄露可以引发很多的问题: