2013年11月29日

【转载】Android 装载器---使用LoaderManager的回调方法

LoaderManager.LoaderCallbacks是一个让客户与LoadManager进行交互的回调接口。
装载器,尤其是CursorLoader装载器,被期望用来保存被终止后的数据,这样就允许应用程序在Activity之间或Fragment的onStop()和onStart()方法之间进行切换时保存数据,以便在用户返回应用程序时,它们不需要因数据重载而等待。使用LoaderManager.LoaderCallbacks()的回调方法就知道在什么时候要创建一个新的装载器,并且告诉应用程序什么时候是终止使用装载器数据的时间。

LoaderManager.LoaderCallbacks接口包含以下方法:

1. onCreateLoader()---用给定的ID实例化并返回一个新的Loader对象;

2. onLoaderFinished()---当之前创建的装载器已经完成它的装载时,调用这个方法;

3. onLoaderReset()---当之前创建的装载器被重置时,调用这个方法,这样会使这个装载器的数据变的无效。

下面分别对这些方法进行详细说明。

 

onCreateLoader

当你想要访问一个装载器是时(例如,通过initLoader()方法),它会检查指定ID的装载器是否存在,如果不存在,它会触发LoaderManager.LoaderCallbacks的onCreateLoader()回调方法。这是创建一个新的装载器的地方,典型的是创建一个CursorLoader装载器,但是你能够实现你自己的Loader类的子类。

例如:

// If non-null, this is the current filter the user has provided.
String mCurFilter;
...
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    // This is called when a new Loader needs to be created.  This
    // sample only has one Loader, so we don't care about the ID.
    // First, pick the base URI to use depending on whether we are
    // currently filtering.
    Uri baseUri;
    if (mCurFilter != null) {
        baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,
                  Uri.encode(mCurFilter));
    } else {
        baseUri = Contacts.CONTENT_URI;
    }

    // Now create and return a CursorLoader that will take care of
    // creating a Cursor for the data being displayed.
    String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
            + Contacts.HAS_PHONE_NUMBER + "=1) AND ("
            + Contacts.DISPLAY_NAME + " != '' ))";
    return new CursorLoader(getActivity(), baseUri,
            CONTACTS_SUMMARY_PROJECTION, select, null,
            Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
}

在这个列子中,onCreateLoader()回调方法创建了一个CursorLoader装载器,你必须使用构造器方法来创建这个CursorLoader对象,它需要一整套执行对ContentProvider的查询所需要信息,具体需要如下:

1.  uri---要获取的内容的位置(URI);

2.  projection---一个要返回的列的列表,如果传递null,将返回所有的列,这样是低效的。

3.  selection---一个要返回的行的过滤器声明,它使用SQL WHERE子句的格式(不包括WHERE关键字本身)。传递null时将返回给定URI的所有行数据。

4.  selectionArgs---你可以在selection中包含“?”字符,这些字符将会被selectionArgs中的值顺序替换。这些值将作为字符串被绑定。

5.  sortOrder---使用SQL ORDER BY子句的格式(不包括ORDER BY自己)指定行记录是如何排序的,如果传递null将会使用默认的排序,也可以是无序的。

 

onLoadFinished

当之前创建的装载器已经完成了它的加载时这个方法会被调用。在提供给这个装载器的最后的数据释放之前会保证调用这个方法。在这个时点你应该删除所有的对旧数据使用(因为数据即将被释放),但是你不应该自己做数据的释放,因为装载器本身会做这件事情。

装载器一旦知道应用程序不在使用它,就会释放数据。例如,如果数据是来自CursorLoader对象的一个游标,你不应该自己来调用close()方法,如果游标被放到了CursorAdapter中,你应该使用swapCursor()方法,以便旧的Cursor对象不被关闭。如:

// This is the Adapter being used to display the list's data.
SimpleCursorAdapter mAdapter;
...

public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    // Swap the new cursor in.  (The framework will take care of closing the
    // old cursor once we return.)
    mAdapter.swapCursor(data);
}

 

onLoaderReset

当之前被创建的装载器被重置的时候,这个方法会被调用。这样就是它的数据变的无效。这个回调能够让你找到数据被释放的时机,以便你能够在数据被释放之前删除对它的引用。

用带有null参数的swapCursor()方法实现这样的调用,如:

// This is the Adapter being used to display the list's data.
SimpleCursorAdapter mAdapter;
...

public void onLoaderReset(Loader<Cursor> loader) {
    // This is called when the last Cursor provided to onLoadFinished()
    // above is about to be closed.  We need to make sure we are no
    // longer using it.
    mAdapter.swapCursor(null);
}

 

posted @ 2013-11-29 10:43 护星月 阅读(309) 评论(0) 推荐(0) 编辑

2013年11月26日

【转载】Android之用PopupWindow实现弹出菜单

摘要: 在使用UC-WebBrowser时,你会发现它的弹出菜单跟系统自带的菜单不一样。它实现更多菜单选项的显示和分栏。其实,它的本身是PopupWindow或者是AlertDialog对话框,在里面添加两个GridView控件,一个是菜单标题栏,一个是菜单选项。菜单选项视图的切换可以通过适配器的变换,轻松地实现。该实例下载路径:http://download.csdn.net/source/3275759一、运行截图:二、实现要点:(1)屏蔽系统弹出的菜单: 1、首先创建至少一个系统的菜单选项@Override public boolean onCreateOptionsMenu(Menu... 阅读全文

posted @ 2013-11-26 14:18 护星月 阅读(384) 评论(0) 推荐(0) 编辑

【转载】使用ActivityGroup来切换Activity和Layout

摘要: 一、效果图 要求点击底部不同图片按钮切换不同的Activity,并在中间显示Activity对应的ContentView。 二、 实现代码 2.1 layout.xmlCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 2.2 TestView.javaCode... 阅读全文

posted @ 2013-11-26 14:12 护星月 阅读(160) 评论(0) 推荐(0) 编辑

【转载】Intent Flag介绍 intent.addFlags()

摘要: intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);FLAG_ACTIVITY_BROUGHT_TO_FRONT 这个标志一般不是由程序代码设置的,如在launchMode中设置singleTask模式时系统帮你设定。FLAG_ACTIVITY_CLEAR_TOP 如果设置,并且这个Activity已经在当前的Task中运行,因此,不再是重新启动一个这个Activity的实例,而是在这个Activity上方的所有Activity都将关闭,然后这个Intent会作为一个新的Intent投递到老的Activity(现在位于顶端)中。 例如,假设.. 阅读全文

posted @ 2013-11-26 10:14 护星月 阅读(180) 评论(0) 推荐(0) 编辑

【转载】Android getWindow().setFlags方法

摘要: //设置窗体全屏getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置窗体始终点亮getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//设置窗体背景模糊getWindow().setFlags(WindowManager.LayoutParam 阅读全文

posted @ 2013-11-26 10:12 护星月 阅读(315) 评论(0) 推荐(0) 编辑

【转载】requestWindowFeature使用详解

摘要: requestWindowFeature可以设置的值有:// 1.DEFAULT_FEATURES:系统默认状态,一般不需要指定 // 2.FEATURE_CONTEXT_MENU:启用ContextMenu,默认该项已启用,一般无需指定 // 3.FEATURE_CUSTOM_TITLE:自定义标题。当需要自定义标题时必须指定。如:标题是一个按钮时 // 4.FEATURE_INDETERMINATE_PROGRESS:不确定的进度 // 5.FEATURE_LEFT_ICON:标题栏左侧的图标 // 6.FEATURE_NO_TITLE:无标题 // 7.FEATURE_OPTIONS_P 阅读全文

posted @ 2013-11-26 10:10 护星月 阅读(177) 评论(0) 推荐(0) 编辑

2013年7月25日

【转载】Android获取文件的MD5值

摘要: package my.bag;import java.io.File;import java.io.FileInputStream;import java.math.BigInteger;import java.security.MessageDigest;import java.util.HashMap;import java.util.Map;import android.app.Activity;import android.os.Bundle;import android.util.Log;public class FileDigest extends Activity { @Over 阅读全文

posted @ 2013-07-25 13:52 护星月 阅读(321) 评论(0) 推荐(0) 编辑

【转载】Android 3 开始 Activity MainThread中不能执行http通信了

摘要: Google从3开始,强制默认禁止UI主线程发起通信请求,看来Google越来越重视UI体验了。这是好事情对应的方法, 有两个:1. 可以临时性的 在Activity初期化的时候,指定StickMode,可以绕开这个OS check, 不过别把这个当彻底的解决方法具体说起来, 就是在要通信的画面的Activity的OnCreate方法中如下配置stickModeStrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork(). 阅读全文

posted @ 2013-07-25 09:35 护星月 阅读(321) 评论(0) 推荐(0) 编辑

【转载】Android HttpClient基本使用方法

摘要: 这里只介绍如何使用HttpClient发起GET或者POST请求GET 方式//先将参数放入List,再对参数进行URL编码List params = new LinkedList();params.add(new BasicNameValuePair("param1", "中国"));params.add(new BasicNameValuePair("param2", "value2"));//对参数编码String param = URLEncodedUtils.format(params, "UT 阅读全文

posted @ 2013-07-25 08:51 护星月 阅读(188) 评论(0) 推荐(0) 编辑

2013年7月21日

【转载】android平台下使用点九PNG技术

摘要: 原文地址:http://www.yixieshi.com/ucd/9142.html“点九”是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png 智能手机中有自动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的参数不同而改变显示的方向,在界面改变方向后,界面上的图形会因为长宽的变化而产生拉伸,造成图形的失真变形。 我们都知道android平台有多种不同的分辨率,很多控件的切图文件在被放大拉伸后,边角会模糊失真。 OK,在android平台下使用点九PNG技术,可以将图片横向和纵向同时进行拉伸,以实现在多分辨率下的完美显示效果。 【普通拉伸... 阅读全文

posted @ 2013-07-21 19:12 护星月 阅读(163) 评论(0) 推荐(0) 编辑

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示