CursorLoaderSms。 Loader 实现短信的即时刷新
来源:互联网 发布:软件架构模式 pdf 编辑:程序博客网 时间:2024/05/22 16:56
使用loader加载数据,可以通过配合Activity声明周期,实现数据
的展示的更新。(前提是数据的更新)
Loader 异步装载器
装载器从android3.0开始引进,它使得在activity或fragment中异步加载数据变得简单。
Loader 让未显示的数据的ListView等UI控件先显示,避免出现白屏的现象。,同时在后台下载数据
等下载完成之后再更新ListView组件。
注册表添加:获取短信的读写功能
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
MainActivity.java文件
1.初始化UI控件
public class MainActivity extends Activity implements LoaderCallbacks<Cursor> {
private ListView listView;
private TextView emptyTextView;
private SimpleCursorAdapter adapter;
private static final int LOADER_ID=1;
2.绑定UI控件
privtate void init(){
//绑定UI部分
listView =(ListView) findViewById(R.id.lv);
emptyTextView =(TextView) findViewById(R.id.empty_tv);
3. (绑定适配器)
adapter = new SimpleCursorAdapter(MainActivity.this,R.layout.activity_item,null,
new String[]{Sms.ADDRESS,SMs.BODY},new int[]{R.id.address_tv,R.id.body_tv},
SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
listView.setAdapter(adapter);
listView.setEmptyView(emptytextview);
4.加载数据部分
LoaderManager loadermanager =getLoaderManager();
//实现LocaderCallback <Cursor> 接口
loadermanager.initLoader(LOADER_ID,null,this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
CursorLoader cursorLoader = new CursorLoader(MainActivity.this,
Sms.CONTENT_URI, new String[] {Sms._ID, Sms.ADDRESS, Sms.BODY }, null,
null, null);
return cursorLoader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
adapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
}
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.LoaderManager;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Telephony.Sms;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
@SuppressLint("NewApi")
public class MainActivity extends Activity implements LoaderCallbacks<Cursor> {
private ListView listView;
private TextView emptyTextView;
private SimpleCursorAdapter adapter;
private final int LOADER_ID = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
// 初始化
private void init() {
// 初始化UI部分
listView = (ListView) findViewById(R.id.lv);
emptyTextView = (TextView) findViewById(R.id.empty_tv);
adapter = new SimpleCursorAdapter(this, R.layout.layout_item, null,
new String[] { Sms.ADDRESS, Sms.BODY }, new int[] {
R.id.address_tv, R.id.body_tv },
SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
listView.setAdapter(adapter);
listView.setEmptyView(emptyTextView);
// 加载数据部分
LoaderManager loaderManager = getLoaderManager();
loaderManager.initLoader(LOADER_ID, null, this);
}
//第一步:获取LoderManager,并且进行相关初始化操作
//第二步:实现LoaderManager.LoderCallBacks的相关回调接口
//第三步:接口中: 1.创建Loader.
2.加载完成
3.加载重置
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
CursorLoader cursorLoader = new CursorLoader(MainActivity.this,
Sms.CONTENT_URI, new String[] {Sms._ID, Sms.ADDRESS, Sms.BODY }, null,
null, null);
return cursorLoader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
adapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#ff0000" />
<TextView
android:id="@+id/empty_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="暂无数据"
android:layout_centerInParent="true" />
</RelativeLayout>
activity_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/address_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="address" />
<TextView
android:id="@+id/body_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="body"
/>
</LinearLayout>
- CursorLoaderSms。 Loader 实现短信的即时刷新
- 即时刷新的新闻
- datagrid的即时刷新
- datagrid的即时刷新
- 实现无刷新即时获取RMB的大写字
- node.JS实现短信即时提醒
- 实现android多语言更改即时刷新
- photoshopCS3 不能即时刷新操作的解决方法
- 创建即时刷新的物化视图
- ListView的用法以及即时刷新
- Loader的简单实现
- 配置gulpfile文件,实现文件更改后浏览器即时刷新
- 即时通信的简单实现
- Android短信监听(三)——利用Loader实现短信监听
- js实现发送短信验证码后的倒计时功能(无视页面刷新)
- js实现发送短信验证码后的倒计时功能(无视页面刷新)
- js实现发送短信验证码后的倒计时功能(无视页面刷新)
- android开发即时刷新某路径下的文件
- IOS 静态库/动态库 简单说明
- 最全 iOS网络请求 上传下载 断点续传
- IOS中pushViewController:的卡顿问题
- 关于IOS 开发 中的一些小技巧
- Android ROM定制——界面美化基础(framework-res、SystemUI修改)
- CursorLoaderSms。 Loader 实现短信的即时刷新
- Python 学习(5)---类的相关知识整理
- HDU 4278 水~ 数位DP
- Java 多线程同步的五种方法
- 利用R计算Pearson Product-moment correlation等
- iOS相机字体英文转中文,相机全屏
- RESTful
- hdu 3926 Hand in Hand(并查集)
- 02-线性结构2 Reversing Linked List