- 浏览: 928579 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
itzhongyuan:
java Random类详解 -
david_je:
你好,我看到你在C里面回调JAVA里面的方法是在native里 ...
Android NDK开发(1)----- Java与C互相调用实例详解 -
fykyx521:
请求锁是在 oncreate 释放实在ondestroy?? ...
Android如何保持程序一直运行 -
aduo_vip:
不错,总结得好!
Android读取assets目录下的资源 -
f839903061:
给的网址很给力哦!
Android 4.0.1 源码下载,编译和运行
Loader和Fragment都是Android 3.0的新特性,有关Fragment相关的内容Android开发网已经用了多个篇幅介绍,而Loader相关的大家可以通过 LoaderManager - Android 3.0新特性 一文了解Loader的作用和结构,下面就以一个简单的工程示例代码了解下Loader。
public class FragmentListCursorLoader extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentManager fm = getFragmentManager(); //获取FragmentManager这个服务实例
if (fm.findFragmentById(android.R.id.content) == null) { //这个资源是android内部的布局,注意是android.R
CursorLoaderListFragment list = new CursorLoaderListFragment();
fm.beginTransaction().add(android.R.id.content, list).commit();
}
}
public static class CursorLoaderListFragment extends ListFragment
implements OnQueryTextListener, LoaderManager.LoaderCallbacks<Cursor> {
SimpleCursorAdapter mAdapter; //这里使用简单cursor适配器绑定数据库
String mCurFilter;
@Override public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setEmptyText("No phone numbers");
setHasOptionsMenu(true); //显示actionbar,如果不明白看android123以前的文章
mAdapter = new SimpleCursorAdapter(getActivity(),
android.R.layout.simple_list_item_2, null,
new String[] { Contacts.DISPLAY_NAME, Contacts.CONTACT_STATUS },
new int[] { android.R.id.text1, android.R.id.text2 }, 0);
setListAdapter(mAdapter);
getLoaderManager().initLoader(0, null, this);
}
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
MenuItem item = menu.add("Search");
item.setIcon(android.R.drawable.ic_menu_search);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
SearchView sv = new SearchView(getActivity());
sv.setOnQueryTextListener(this);
item.setActionView(sv);
}
public boolean onQueryTextChange(String newText) {
mCurFilter = !TextUtils.isEmpty(newText) ? newText : null;
getLoaderManager().restartLoader(0, null, this);
return true;
}
@Override public boolean onQueryTextSubmit(String query) {
return true;
}
@Override public void onListItemClick(ListView l, View v, int position, long id) {
Log.i("FragmentComplexList", "Item clicked: " + id);
}
static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
Contacts._ID,
Contacts.DISPLAY_NAME,
Contacts.CONTACT_STATUS,
Contacts.CONTACT_PRESENCE,
Contacts.PHOTO_ID,
Contacts.LOOKUP_KEY,
};
public Loader<Cursor> onCreateLoader(int id, Bundle args) { //这里的处理是异步的
Uri baseUri;
if (mCurFilter != null) {
baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,
Uri.encode(mCurFilter));
} else {
baseUri = Contacts.CONTENT_URI;
}
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");
}
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data); //处理完成
}
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
}
}
public class FragmentListCursorLoader extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentManager fm = getFragmentManager(); //获取FragmentManager这个服务实例
if (fm.findFragmentById(android.R.id.content) == null) { //这个资源是android内部的布局,注意是android.R
CursorLoaderListFragment list = new CursorLoaderListFragment();
fm.beginTransaction().add(android.R.id.content, list).commit();
}
}
public static class CursorLoaderListFragment extends ListFragment
implements OnQueryTextListener, LoaderManager.LoaderCallbacks<Cursor> {
SimpleCursorAdapter mAdapter; //这里使用简单cursor适配器绑定数据库
String mCurFilter;
@Override public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setEmptyText("No phone numbers");
setHasOptionsMenu(true); //显示actionbar,如果不明白看android123以前的文章
mAdapter = new SimpleCursorAdapter(getActivity(),
android.R.layout.simple_list_item_2, null,
new String[] { Contacts.DISPLAY_NAME, Contacts.CONTACT_STATUS },
new int[] { android.R.id.text1, android.R.id.text2 }, 0);
setListAdapter(mAdapter);
getLoaderManager().initLoader(0, null, this);
}
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
MenuItem item = menu.add("Search");
item.setIcon(android.R.drawable.ic_menu_search);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
SearchView sv = new SearchView(getActivity());
sv.setOnQueryTextListener(this);
item.setActionView(sv);
}
public boolean onQueryTextChange(String newText) {
mCurFilter = !TextUtils.isEmpty(newText) ? newText : null;
getLoaderManager().restartLoader(0, null, this);
return true;
}
@Override public boolean onQueryTextSubmit(String query) {
return true;
}
@Override public void onListItemClick(ListView l, View v, int position, long id) {
Log.i("FragmentComplexList", "Item clicked: " + id);
}
static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
Contacts._ID,
Contacts.DISPLAY_NAME,
Contacts.CONTACT_STATUS,
Contacts.CONTACT_PRESENCE,
Contacts.PHOTO_ID,
Contacts.LOOKUP_KEY,
};
public Loader<Cursor> onCreateLoader(int id, Bundle args) { //这里的处理是异步的
Uri baseUri;
if (mCurFilter != null) {
baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,
Uri.encode(mCurFilter));
} else {
baseUri = Contacts.CONTENT_URI;
}
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");
}
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data); //处理完成
}
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
}
}
发表评论
-
Android使用binder访问service的方式
2013-08-23 09:42 16291. 我们先来看一个与本地service通信的例子。 pub ... -
android-Service和Thread的区别
2013-08-23 09:17 913servie是系统的组件,它由系统进程托管(servicema ... -
git介绍
2013-08-01 14:49 1029git介绍 使用Git的第一件事就是设置你的名字和email ... -
cocos2d-x学习之自动内存管理和常见宏
2013-07-29 15:41 9071.自动内存管理 1)概述 C++语言默认是 ... -
cocos2dx中利用xcode 调用java中的函数
2013-07-29 11:36 25231. 先把cocos2dx根目录中的 /Users/zhaos ... -
cocos2dx(v2.x)与(v1.x)的一些常用函数区别讲解
2013-07-29 10:35 1108第一个改动: CCLayer初始化 自定义Layer,类名 ... -
xcode与eclipse整合cocos2dx
2013-07-29 10:32 1219文档xcode版本是 204 1. 在xcode中创建coc ... -
git提交代码
2013-07-23 16:00 10481. 在本地创建一个Git的工作空间,在里面创建一个工程(如H ... -
Android.mk的用法和基础
2013-07-19 14:11 4329一个Android.mk file用来向编译系统描述你的源代码 ... -
eclipse配置NDK-Builder命令
2013-07-18 11:02 10341. 2. -
eclipse配置javah命令
2013-07-18 10:48 19931.找到javah命令所在的目录 我的为 /usr/bi ... -
Android SDL2.0 编译
2013-07-17 13:40 19651,下载: wget http://www.libsdl.o ... -
IntelliJ Idea 常用快捷键列表
2013-05-27 10:19 0Alt+回车 导入包,自动修 ... -
android应用后台安装
2013-05-21 12:02 1012android应用后台安装,静默安装的代码实现方法 http ... -
编译linux内核映像
2013-05-21 11:33 960a)准备交叉编译工具链 android代码树中有一个pr ... -
如何单独编译Android源代码中的模块
2013-05-21 11:29 992一. 首先在Android源代码 ... -
Ubuntu安装JDK6和JDK5
2013-05-19 19:04 1006sudo apt-get install sun-java6- ... -
java_jni详解_01
2013-05-08 17:15 956java中的jni 例子HelloWorld 准备过程: 1 ... -
下载android源码 中断解决原因
2013-05-07 15:51 1313解决方法 1. 浏览器登录https://android.go ... -
mac下编译ffmpeg1.1.4
2013-05-07 14:55 1362经过一番网上搜索 与 无数次的编译 终于成功了 下面献上编译 ...
相关推荐
以"**MyFragLoaderTest**"为例,这个可能是测试项目或者一个具体的Fragment示例,它展示了如何在Fragment中使用Loader来实现异步加载。在这个测试中,开发者可能创建了一个自定义的Loader,用于从特定的数据源加载...
9. **UI设计和布局**:可能涉及到XML布局文件的创建和解析,以及各种视图组件(如Button、TextView、ImageView等)的使用和自定义。 10. **权限管理**:Android系统对敏感操作进行了权限控制。这部分可能介绍如何在...
- 可以通过在XML布局中使用<fragment>标签或者在代码中动态添加来实现。 5. **Fragment的通信**: - Fragment之间以及Fragment与Activity之间的通信是关键。可以使用回调接口、EventBus、LiveData、ViewModel等...
示例代码片段: ```java public class CustomImageLoader extends AsyncTaskLoader<List<Bitmap>> { // 实现加载逻辑... } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate...
在`src`目录下,可能包含了示例代码或库的源码,供开发者学习和参考,理解Fragment的实现细节和如何在实践中使用它们。 在`docs`目录中,通常会有详细的API文档和开发者指南,这些文档可以帮助开发者深入理解...
7. **Fragment的Loader支持**:在Fragment中使用Loader,可以更好地管理数据加载和Fragment的生命周期,特别是在Fragment的重建过程中,Loader能够恢复之前的状态,避免重复加载数据。 在"loader_test"这个压缩包...
5. **高效的数据更新**:由于Loader会在数据变化时自动触发加载,所以聊天界面只需专注于展示数据,无需手动检查和刷新,这提高了代码的可维护性和性能。 在"TalkDemo"这个示例项目中,我们可以预期看到以下关键...
在这个项目中,`WeChatDemo-master`压缩包文件包含了一个模仿微信功能的示例代码,让我们深入探讨这个设计模式和相关知识点。 1. **Activity与Fragment的关系**: - Activity是Android应用中的基本组件,负责处理...
这个“Andorid例子源码仿百度贴吧APP应用的Fragment”提供了关于如何模仿百度贴吧应用中的Fragment使用方式的示例。下面将详细探讨Fragment在Android应用中的重要性和如何实现。 Fragment的概念起源于Android 3.0...
`universal-image-loader-demo`这个项目可能包含了以上所有功能的示例代码,通过查看和运行这个项目,可以更深入地理解和学习如何在实际项目中应用Universal Image Loader。通过实践和调试,你将更好地掌握这个强大...
4. **LiveData和ViewModel**:虽然Loader是Android早期的解决方案,但现代Android开发更倾向于使用 LiveData 和 ViewModel。不过,Loader的生命周期感知特性与LiveData有相似之处,都能够在组件存活期间保持数据的...
在实际学习和使用这些示例代码时,开发者可以期待以下内容: 1. **基础组件的使用**:例如Activity、Fragment、Intent等,这些都是构建Android用户界面的基础。 2. **布局设计**:XML布局文件的编写,包括线性布局...
2. 在Activity或Fragment中初始化Loader并使用相同的LoaderManager.LoaderCallbacks接口。 3. 示例代码: ```java public class MyAsyncTaskLoader extends AsyncTaskLoader[]> { @Override protected String[] ...
这个源码示例对于学习Android应用开发,尤其是掌握ViewPager、Fragment和WebView的使用,以及实现常见应用功能,具有很高的参考价值。开发者可以通过研究源码,加深对这些组件的理解,并将它们运用到自己的项目中。
虽然示例代码是用Java编写的,但这里也提到了Kotlin的实现方式。Kotlin中,可以使用伴生对象来存储常量,如`LOADER_ID`和`PHONE_PROJECTION`。 总的来说,Loader为Android应用提供了一种高效、优雅的方式来处理...
在Android开发领域,`.samples`通常指的是包含示例代码或项目的集合,用于帮助开发者更好地理解和学习Android应用程序的构建过程。这个名为"Android代码-.samples"的压缩包很可能包含了多个具体的Android应用示例...
在实际项目中,你可能还需要考虑如何优化Fragment的加载过程,例如使用Loader或者AsyncTask来异步加载数据,避免阻塞UI线程。同时,对于资源的释放也应做好管理,防止内存泄漏。 通过以上方法,我们可以有效地控制...
在`FragmentDemo`这个示例项目中,我们可以看到如何将上述步骤应用于实际的代码实现。开发者通常会在Fragment中创建一个自定义Loader,比如`FragmentDataLoader`,然后在`onActivityCreated()`中初始化Loader,传递...
Universal_Image_Loader是一款在Android平台上广泛使用的开源图片加载库,由Sergey Tarasevich开发,它提供了强大的图片缓存功能,支持多种图片格式,同时具备图片的异步加载、内存管理、错误处理和动画效果等特性。...
本示例源代码提供了关于Android ListView的详细实现,帮助开发者掌握如何有效地使用和定制ListView。 首先,ListView的基本使用包括以下几个关键步骤: 1. **布局文件配置**:在XML布局文件中添加ListView元素,...