技术标签: CursorLoader android笔记
Loader在Android3.0引进,它让异步加载数据变得容易。
特征:
1.在Activity、Fragment中都可以使用
2.Loader可以提供异步加载数据
3.监视数据源的变化,当数据源发生变化的时候,会传递新的数据
4.当loader重建的时候,会自动链接到最后一个Loader的cursor数据上,而不去进行重新查找。
在app中使用Loader的时候,可能使用到的类和接口:
LoaderManager:这是一个抽象类,关联在Activity、Fragment上,管理一个或多个Loader,帮助app管理耗时操作在Activity、Fragment的生命周期过程中。最常和CursorLoader一块使用。每一个Activity或Fragment只有一个FragmentManager对象。一个FragmentManager可以管理多个Loader
LoaderManager.LoaderCallbacks:和LoaderManger关联在一起的回调接口。onCreateLoader()会调方法,创建Loader对象。
Loader:抽象类,异步加载数据。主要使用CursorLoader。监视数据源的变化,当数据源发生改变的时候,传递新的数据内容。
AsyncTaskLoader:抽象的,提供了一个AsyncTask
CursorLoader:是AsyncTaskLoader的子类,使用ContentResolver查找数据,返回Cursor。加载Cursor数据的时候操作在非UI线程,so,不会阻塞UI线程。该类是查找ContentProvider提供出来的数据的最好的方式。
LoaderManager:用它实例化Loader--》cursorLoader
使用Loader:
1.Activity、Fragment
2.LoaderManager的实例
3.CursorLoader在后台加载数据--》ContentProvider
4.LoaderManager.LoaderCallbacks实现
5.需要展示数据的:SimpleCursorAdapter
6.数据源:ContentProvider
在一个Activity、Fragment中,只有一个LoaderManager实例。
需要在Activity的onCraete方法中或者是Fragment的onActivityCreated方法中实例化Loader对象:
getLoaderManager().initLoader(0,null, this);
public class MainActivity extends Activity implements LoaderCallbacks<Cursor>,OnQueryTextListener{
private TextView tv;
private ListView lv;
private SimpleCursorAdapter cursorAdapter;
private String filterName=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView) findViewById(R.id.tv);
tv.setText("请稍候");
cursorAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_expandable_list_item_2, null, new String[]{ContactsContract.Contacts.DISPLAY_NAME}, new int[]{android.R.id.text1},0);
lv=(ListView) findViewById(R.id.lv);
lv.setAdapter(cursorAdapter);
//初始化Loader
//参数1:实例化Loader数据加载的id
//参数2:传递参数onCreateLader()方法的第二个参数
//参数3:回调接口
getLoaderManager().initLoader(0, null, this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main,menu);
SearchView v= (SearchView) menu.findItem(R.id.menu_search).getActionView();
v.setOnQueryTextListener(this);
return true;
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Uri uri;
String [] pro = new String[]{ContactsContract.Contacts.DISPLAY_NAME,ContactsContract.Contacts._ID};
if(TextUtils.isEmpty(filterName)){
uri=ContactsContract.Contacts.CONTENT_URI;
}
else{
//给当前的Uri最后追加一个 数字或字符串
uri=Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_FILTER_URI, Uri.encode(filterName));
}
//创建Loader对象,开始异步加载数据
return new CursorLoader(this, uri, pro, null, null, null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
//得到异步加载数据,更新Adapter
//交换Cursor,就是把之前已经有的Cursor交换掉,用data,所以起到一个更新的作用
cursorAdapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
//移除adapter使用的Loader,系统会释放不再使用的Loader
cursorAdapter.swapCursor(null);
}
@Override
public boolean onQueryTextSubmit(String query) {
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
filterName = newText;
getLoaderManager().restartLoader(0, null, this);
return false;
}
}
menu_main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" >
<item
android:id="@+id/menu_search"
android:actionViewClass="android.widget.SearchView"
android:showAsAction="ifRoom|collapseActionView"
android:title="搜索"
tools:ignore="AppCompatResource">
</item>
</menu>
文章浏览阅读2.2k次。MT2503平台技术资料介绍:包括原理图、参考设计、规格书、源码、FAQ等一系列技术资料,有需要的可到一牛网论坛中下载或者到小编的CSDN资源里下载。此外,还有MT2503平台方案开发,MT2503模块等需要合作的,到一牛网论坛或在下方留言都可以。MT2503_all_feature__GPIO_Mapping_v1_0.rarMT2503_Ballmap_Package_V0.2.zi..._mt2503和mt2601
文章浏览阅读910次。写在最前Docker安装RocketMQRocketMQ 入门必读Spring Boot 整合 RocketMQDemo 地址:mingyue-springboot-rocketmq1.添加依赖<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <_springboot rocketmq队列发送1000条数据抢
文章浏览阅读1.8k次。以哪吒之魔童降世影片的海报为例进行图片爬取参考网址:哪吒之魔童降世官方海报爬虫逻辑:【分页网页url采集】-【数据采集】-【保存图片】经过前两篇文章的实践,可以发现两种爬虫逻辑各有优缺点,逻辑(一)可以获得相对详细的信息,但是需要从主url中获取分页url再进行数据的爬取,很消耗时间,而逻辑(二)则是直接获取在第一个url上的信息,爬取即可,很省时,当然相对地获取的信息也就较少一些。而这次..._python 爬取电影海报
文章浏览阅读1.3k次。1. Maximum license type (copying, scripts, etc. work now).2. Fixed integrity check #1.3. Fixed integrity check #2.4. All the telemetry has been cut out.5. Removed the update checks and other shit ..._jeb 3.7.0
文章浏览阅读737次。1.标题Orthogonal Time Sequency Multiplexing Modulation: Analysis and Low-Complexity Receiver Design2.作者Tharaj Thaj, Emanuele Viterbo, and Yi Hong3.关键词OTFS,WHT,OTSM,Delay_sequency4.词汇OTFS正交时频空间OTSM正交时间序列复用delay_sequency延迟序列delay_Dopp_otsm
文章浏览阅读844次,点赞16次,收藏20次。【三相旋转磁场】研究涉及了对旋转磁场直到指定数量的周期的详尽探索,并且在研究过程中绘制了磁场随时间变化的图表。本文将深入探讨三相电机中磁场的旋转特性,包括磁场的形成过程、随时间的演变以及对电机性能的影响。通过对旋转磁场的系统分析,读者将能够更全面地理解三相电机工作原理,从而为电力系统和电机控制领域的进一步研究和应用提供坚实的理论基础。通常情况下,可以通过控制三个相位电流的频率和相位差来控制旋转磁场的速度和方向。要让这个磁场旋转到指定数量的周期,需要控制三个相位电流的频率和相位差。行百里者,半于九十。
文章浏览阅读327次。<?php/*****************************************************************************===================== 请误用于非法用途,造成一切后果与本人无关。====================发布此版本是为了纪念安全天使曾经的辉煌。感谢你们与我一同走过:Sniper\Super...
文章浏览阅读326次。笔者主要介绍国内四家AI大模型相关情况_头条的大模型
文章浏览阅读541次。KRatingBar先说说,这个控件存在的意义(和原生RatingBar相比):1.自动排列:指定星星数量后,星星自动均等排列2.星星点击动画:算是满足一丢丢少女心吧3.星星数量脱离了RatingBar宽度的控制4.避免星星出现拖影和“流泪”现象5.星星的样式直接调用res的drawable,不用再单独去定义个layer-list总之就是使用更方便一点吧。请看效果:为啥要..._android 打分星星动画
文章浏览阅读2k次。1.由于导入import导入数据时乱码,一直找不到解决办法,于是就用load导入LOAD后,发现某些表检查挂起( 原因码为 "1",所以不允许操作 SQLSTATE=57016)解决办法:set integrity for xxxxxx immediate checked2.表锁定(原因码为7)解决办法:reorg table xxxx3.去重select di..._db2 export 默认编码
文章浏览阅读237次。定义一个整型变量num:num是标识符号,也叫变量名称,int是变量类型, 10是初始值可选变量分为两种:基本类型的变量和引用类型的变量。在Java中,所有的变量必须先声明再使用。基本的变量声明方法如下:type是Java的基本类型之一,或类及接口类型的名字。标识符(identifier)是变量的名字,指定一个等号和一个值来初始化变量。请记住初始化表达式必须产生与指定的变量类型一样(或兼容)的变量。声明指定类型的多个变量时,使用逗号将各变量分开;
文章浏览阅读4.1k次,点赞3次,收藏4次。yarn 安装依赖报错 error An unexpected error occurred: https://registry.yarnpkg.com“