17 ContentProvider
- 1 Loader 转载器 Android3.0以后出来的 它可以使Activity和Fragment 异步加载数据 变得简单(Loader里封装了AsyncTask)
2 Loader特点:
- 对每一个Activity或者Fragment有效
- 提供异步加载数据的机制
- 监测数据源的变化 ,并对变化返回新的结果
- 由于配置发生改变 重新创建Loader时 他会自动链接上一个加载器游标,不会重新查询数据
3 使用:
1,初始化Loader initLoader(编号,查询条件,回调接口);
2,实现回调接口 实现三个方法
3,在三个方法里做相应的动作代码例子:
package com.qf.day18_loader_demo1; import android.app.Activity;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.ContentResolver;
import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter; public class MainActivity extends Activity implements LoaderCallbacks<Cursor> { private EditText etContent;
private ListView lv; // 查找数据
private ContentResolver contentResolver; private SimpleCursorAdapter adapter; private Uri contactsUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); etContent = (EditText) findViewById(R.id.et_content);
lv = (ListView) findViewById(R.id.lv); etContent.addTextChangedListener(new TextWatcher() { @Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub } @Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub } @Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
// 文本发生改变
Bundle bundle = new Bundle();
bundle.putString("key", s.toString());
// 当加载数据的条件发生改变时 重启loader
getLoaderManager().restartLoader(1, bundle, MainActivity.this);
}
}); adapter = new SimpleCursorAdapter(MainActivity.this, R.layout.item, null,
new String[] { "display_name", "data1" }, new int[] { R.id.tv_name, R.id.tv_data },
SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); lv.setAdapter(adapter); /**
* 获取当前组件Activity 的Loader对象 获取Loader管理者对象 用对象进行初始化
*
*/
getLoaderManager().initLoader(1, null, this); } /**
* 创建Loader 用于加载数据
*
* @param id
* @param args
* @return
*/
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
// TODO Auto-generated method stub
String selection = null;
String[] selectionArgs = null; // 有传递过来的数据
if (args != null) { String key = args.getString("key");
selection = "display_name like ? or data1 like ?";
selectionArgs = new String[] { "%" + key + "%", "%" + key + "%" };
} CursorLoader cursorLoader = new CursorLoader(MainActivity.this, contactsUri,
new String[] { "_id", "display_name", "data1" }, selection, selectionArgs, null);
return cursorLoader;
} /**
* Loader加载数据完成 调用此方法
*
* @param arg0
* @param arg1
*/
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
// TODO Auto-generated method stub
// 将数据展示到ListView上
adapter.swapCursor(arg1);
} /**
* 重置时 调用此方法
*
* @param arg0
*/
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
// TODO Auto-generated method stub
// 清除旧的数据
adapter.swapCursor(null);
} }
17 ContentProvider的更多相关文章
- 985硕艰难转行Android之路 加面经分享
个人情况介绍 本人为某末流985工科硕士,说来令人感慨,我的考研之路异常曲折,每次都觉得自己能十拿九稳,结果每次都阴差阳错,失之交臂,第一次因为那年目标院校大幅度提升初试线,导致差一分未过线,第二次换 ...
- 17 一个ContentProvider的例子
服务端(ContentProvider) 目录结构图: MainActivity.java: package com.qf.day17_contentprovider_words_demo2; imp ...
- 四大组件之ContentProvider
前言 ContentProvider作为Android的四大组件之一,是属于需要掌握的基础知识,可能在我们的应用中,对于Activity和Service这两个组件用的很常见,了解的也很多,但是对Con ...
- 解读ContentResolver和ContentProvider
转自:http://cthhqu.blog.51cto.com/7598297/1281217 1. ContentProvider的概述 ContentProvider: (Official Def ...
- contentprovider的学习实例总结
工作中遇到了contentprovider数据共享机制,下面来总结一下: 一.ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数 ...
- SQLite数据库与Contentprovider(1)
SQlite:类似mysql的数据库.把数据保存到.db文件夹中. Contentprovider:一般用于不同进程之间的数据共享(两个APP). 手动建库:http://www.runoob.com ...
- 基础学习总结(五)---baseAdapter、ContentProvider
小写转大写 : ctrl+shift+F <ScrollView></ScrollView>滚动条显示视图 ListView与BaseAdapter: public class ...
- Android(java)学习笔记247:ContentProvider使用之利用ContentProvider备份和还原手机短信(掌握)
1.通过阅读系统源码我们知道: 短信的内容提供者: content://sms/ 系统短信的内容提供者的路径 2. 利用ContentProvider备份和还原手机短信: (1) ...
- Android(java)学习笔记245:ContentProvider使用(银行数据库创建和增删改查的案例)
1. Android的四大组件: (1)Activity 用户交互的UI界面 (2)Service 后台运行的服务 (3)BroadcastReceiver 广播接收者 (4)ContentPro ...
随机推荐
- 计蒜客NOIP模拟赛(2) D2T2紫色百合
[问题描述] “牵着你的手的是她,路边开满了紫色的百合花……” 你从梦中醒来,却依然忘不了梦中的她百合花,每朵百合花都有一个权值,在二进制下写成一行‘1’,第i朵紫色百合的权值在二进制下写成i个‘1’ ...
- bzoj 1058: [ZJOI2007]报表统计
Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个 ...
- Linux中LCD设备驱动-framebuffer(帧缓冲)【】
转自:https://blog.csdn.net/linux_devices_driver/article/details/7079442 1.framebuffer 帧缓冲 帧缓冲(fram ...
- Python-闭包详解
在函数编程中经常用到闭包.闭包是什么,它是怎么产生的及用来解决什么问题呢.给出字面的定义先:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)(想想Erlang的外层函数传入一个 ...
- JFinal实现伪静态
JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java语言所有优势的同时再拥有ru ...
- Redis实现单点登录
http://blog.csdn.net/WuCourage/article/details/77802812
- SpringMVC中HandlerMapping的三种配置方式
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE beans PUBLIC "-/ ...
- Spring @Component的作用详细介绍
@component 作用 1.@controller 控制器(注入服务)2.@service 服务(注入dao)3.@repository dao(实现dao访问)4.@component (把普通 ...
- web领域的实时推送技术-WebSocket
WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex),即是所谓的及时推送技术. 在此之前,很多网站为了实现及时推送技术通常采用的是 ...
- vue-router实现登录和跳转到指定页面,vue-router 传参
定义路由的时候可以配置 meta 字段: const router = new VueRouter({ routes: [ { path: '/foo', component: Foo, childr ...