Java 如何刷新LoaderManager
我读了很多文章和指南,但在使用Java 如何刷新LoaderManager,java,android,android-asynctask,android-recyclerview,android-loadermanager,Java,Android,Android Asynctask,Android Recyclerview,Android Loadermanager,我读了很多文章和指南,但在使用LoaderManager从SQLite数据库获取数据时,我仍然面临许多问题 我已经和它斗争了一个多星期,我按照许多不同的例子多次编辑代码,但问题仍然存在 首先,我必须说我的AsyncTaskLoader返回我创建的对象列表,因此我不能依赖CursorLoader方法来“刷新”查询 这是我的AsyncTaskLoader,从中我可以得到一个MyContact列表 public class MyLoader extends AsyncTaskLoader<Lis
LoaderManager
从SQLite
数据库获取数据时,我仍然面临许多问题
我已经和它斗争了一个多星期,我按照许多不同的例子多次编辑代码,但问题仍然存在
首先,我必须说我的AsyncTaskLoader
返回我创建的对象列表,因此我不能依赖CursorLoader
方法来“刷新”查询
这是我的AsyncTaskLoader
,从中我可以得到一个MyContact列表
public class MyLoader extends AsyncTaskLoader<List<MyContact>>{
private List<MyContact> myContacts;
private Bundle bundle;
public MyLoader(Context context, Bundle bundle) {
super(context);
this.bundle = bundle;
}
public List<MyContact> loadInBackground(){
myContacts = //here I build my List of MyContact with data taken from a DB
return myContacts;
}
}
公共类MyLoader扩展了AsyncTaskLoader{
私人清单;
私有包;
公共MyLoader(上下文、捆绑包){
超级(上下文);
this.bundle=bundle;
}
公共列表加载背景(){
myContacts=//在这里,我使用从数据库中获取的数据构建我的MyContact列表
返回myContacts;
}
}
这是我实现LoaderManager方法的活动:
public class ContactsActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<List<MyContact>>{
private LoaderManager loaderManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
loaderManager = getLoaderManager();
loaderManager.initLoader(1, null, this);
}
....
@Override
public Loader<List<MyContact>> onCreateLoader(int i, Bundle bundle) {
return new MyLoader(this, bundle);
}
@Override
public void onLoadFinished(Loader<List<MyContact>> loader, List<MyContact> myContacts) {
Here I fill a RecyclerView with myContacts
}
@Override
public void onLoaderReset(Loader<List<MyContact>> loader) {
}
}
公共类ContactsActivity扩展AppCompatActivity实现LoaderManager.LoaderCallbacks{
专用LoaderManager LoaderManager;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
loaderManager=getLoaderManager();
initLoader(1,null,this);
}
....
@凌驾
公共加载器onCreateLoader(inti,Bundle){
返回新的MyLoader(此,捆绑);
}
@凌驾
public void onLoadFinished(加载程序,列出myContacts){
这里我用myContacts填充一个RecyclerView
}
@凌驾
公共void onLoaderReset(加载器){
}
}
我的问题是,在数据库更新之后,我应该通过“刷新”loaderManager获得MyContacts的更新列表。我不会向你们展示我实现目标的不同方式
我在SO和其他网站上尝试了很多方法,我甚至实现了一个
BroadcastReceiver
,但我无法让它工作,而且我无法理解我的错误,因为我没有收到任何“java”错误。尝试在刷新时跟踪。它为各自的加载器Id重置并重新启动加载器。虽然我已经将其用于游标,但它也应该适用于自定义对象
loaderManager.restartLoader(loaderId, null, context);
在对SQLite数据库进行更新后,尝试添加以下代码行:
getContentResolver().notifyChange(uri, null);