如何查询LoaderManager以查看Loader当前是否正在运行?
这里说它SimpleCursorAdapter的API级别1构造函数已被弃用,建议使用LoaderManager和CursorLoader.
但是深入研究LoaderManager和CursorLoader使用我发现这个例子里面的内部类扩展了一个ListFragment(我认为是Fragment本身的扩展),我们创建了一个CursorLoader.一切似乎确定,不同的是,其实CursorLoader需要一个Uri作为参数.所以这意味着我需要创建一个ContentProvider访问我的数据库的权限.
我必须承认,为了创建一个简单的ListView来自数据库的项目,我们必须完成所有这些操作才能看起来有点过分.特别是如果我不打算将我的数据库数据提供给其他应用程序,并且内容提供商的主要目的是这样做.
那真的值得吗?
特别是在像我这样的情况下,要获取的内容可能会很小.我认真考虑用旧方式做,你怎么说?
sqlite android uri android-contentprovider android-loadermanager
我希望在ListActivity中实现Loader,但活动不识别getLoaderManager.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dbHelper = new DBHelper(this,DBNAME,FindPackageName(), TABLE_NAME);
sql = dbHelper.getReadableDataBase();
//Log.d("Gaurav","Database Open");
String[] from = new String[]{"word","_id","MyList"};
int[] to = new int[]{R.id.listrow };
simpleCursorLoader = new SimpleCursorLoader(this, TABLE_NAME, from, null, null, null, null, null, null, sql);
//query result will be whole database
//cursor = sql.query(TABLE_NAME, from, null, null, null, null, null);
//startManagingCursor(cursor); //this method is deprecated
//Log.d(TAG,"Cursor Set");
completerOrMyListAdapter = new CompleteOrMyListAdapter(this,
R.layout.completeormylist_adapter, cursor, from, to, dbHelper);
setListAdapter(completerOrMyListAdapter);
// Prepare the loader. Either re-connect …Run Code Online (Sandbox Code Playgroud) CursorAdapter有3个构造函数.让我们看一下指南和参考.
1)CursorAdapter(上下文上下文,光标c)
不推荐使用此构造函数.不鼓励使用此选项,因为它会导致在应用程序的UI线程上执行Cursor查询,从而导致响应能力较差甚至应用程序无响应错误.或者,使用带有CursorLoader的LoaderManager.
2)CursorAdapter(Context context,Cursor c,boolean autoRequery)
允许控制自动重新查询的构造函数.建议您不要使用它,而是使用 CursorAdapter(Context,Cursor,int).
3)CursorAdapter(上下文上下文,Cursor c,int标志)
推荐的构造函数.
flags 用于确定适配器行为的标志; 可以是FLAG_AUTO_REQUERY和FLAG_REGISTER_CONTENT_OBSERVER的任意组合.
FLAG_AUTO_REQUERY 不推荐使用此常量.不鼓励使用此选项,因为它会导致在应用程序的UI线程上执行Cursor查询,从而导致响应能力较差甚至应用程序无响应错误.或者,使用带有CursorLoader的LoaderManager.
FLAG_REGISTER_CONTENT_OBSERVER.将CursorAdapter与CursorLoader一起使用时,不需要此标志.
CursorAdapter(Context context,Cursor c,int flags)是推荐的构造函数,但是可能的标志是2,当使用带有CursorLoader的CursorAdapter时,不推荐使用其中一个,而不需要另一个.如果我使用带有CursorLoader的CursorAdapter,我必须使用此构造函数并将零作为标志传递?在这种情况下,构造函数是否与#1相同?
android constructor android-loadermanager android-cursoradapter
我正面临着Loader的问题.
我有一个Activity,它显示从本地DB检索的记录列表.活动开始时,记录将通过LoaderManager.initLoader()方法自动加载.
还可以通过ActionBarSherlock中的刷新按钮手动刷新列表.但是,在完成另一个向DB添加记录的活动之后,不会调用onLoadFinished.
我正在使用SimpleCursorLoader,这里是活动的代码片段:
@Override
public void onStart() {
...
getSupportLoaderManager().initLoader(0, null, this);
}
@Override
public void onPause() {
...
getSupportLoaderManager().destroyLoader(0);
}
public void refreshRecords() {
getSupportLoaderManager().restartLoader(0, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, final Bundle args) {
Loader<Cursor> l = new SimpleCursorLoader(this) {
@Override
public Cursor loadInBackground() {
return recordDAO.getCursor();
}
};
l.forceLoad();
return l;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor c) {
// updateUI
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
Run Code Online (Sandbox Code Playgroud)
问题是,在完成其他活动之后,会onLoaderCreate …
编辑:有关详细的操作方法,请查看我的答案.
我现在挣扎了两天,希望有人可以提供帮助.
我正在尝试将最新的ActionBarSherlock(4.0)与MapView一起使用.我知道片段存在问题,但我不需要它们.但我需要Loaders,看来,使用Loaders我也必须扩展FragmentActivity.没问题,我想,我们有来自Pete Doyle 的android-support-v4-googlemaps.正如许多SO线程和Google网上论坛所建议的,我使用android-support-v4-googlemaps JAR(实际上是android-support-v13-r7-googlemaps.jar)而不是android-support-v4.jar来构建ABS.然后我用它作为我项目的库.
现在,我希望以这种方式进行活动:
public class BananoutMapActivity extends SherlockFragmentActivity implements LoaderCallbacks<ArrayList<EventItem>>{
问题:
它编译,但抛出运行时错误: E/AndroidRuntime(29159): java.lang.NoClassDefFoundError: ndl.klimczak.bananout.BananoutMapActivity
我三重检查的事情:
<uses-library android:name="com.google.android.maps" />,我在应用程序标签中有它..BananoutMapActivity在我的清单中宣布过有趣的是:
当我在ICS模拟器上运行它时它会工作(错误出现在2.*模拟器和我的2.3.7设备上),在Honeycomb上,它很可能会工作,这是使用ACL的问题我猜
当我删除implements LoaderCallbacks<ArrayList<EventItem>>它也有效的部分,但这样我就无法使用LoaderManager
为什么在NoClassDefFoundError错误以及如何让我的MapCapableSherlockEnabledFragmentActivity中的加载器工作?
android android-maps actionbarsherlock android-loadermanager
我在FragmentActivity中使用多个ListFragments创建一个viewPager.为了填充不同的列表视图,我在加载器中获得LoaderManager和initiliaze.我希望每个片段都有一个唯一的LoaderManager,但是,片段没有getSupportLoaderManager()方法,所以我需要调用父片段活动:
getActivity().getSupportLoaderManager()
Run Code Online (Sandbox Code Playgroud)
我的Loaders在不同片段中识别的这种方法的问题与彼此冲突.当你已经在一个片段中拥有多个加载器id时,它会变得有点麻烦.那么有没有办法为每个片段获取一个唯一的LoaderManager,而不是调用父片段?我基本上希望能够在多个片段上使用相同的id.
谢谢
android android-cursor android-listfragment android-loadermanager android-support-library
我目前正在寻找使用装载程序管理器在drawerlayout中填充我的expandablelistview.我不能在文档中发现任何地方如果在回调函数onLoadFinished()在UI线程或在后台线程上运行.它是在后台线程吗?
根据一些文档,我可以在Activity或Fragment中使用Loader,但兼容包显示只有FragmentActivity具有getLoaderManager()方法.
由于旧的托管游标已被弃用,我们必须使用Cursor Loader.那么为什么这个数据管理功能应该与UI小部件的选择联系起来呢?对我来说完全是无稽之谈.
谢谢P.
我正在尝试将我的代码从使用游标转换为使用CursorLoaders.为了支持旧版本的Android,我安装了支持库,而不是导入android.content.CursorLoader,我正在导入android.support.v4.content.CursorLoader.现在编译好的代码会抛出两个错误.我实现它时,第一个错误是在LoaderManager上.错误是:LoaderManager无法解析为某种类型.第二个错误是对initLoader的调用.错误是:LoaderManager类型中的方法initLoader(int,Bundle,LoaderManager.LoaderCallbacks)不适用于参数(int,Bundle,MyList).这是我的代码:
public class MyList extends ListActivity implements LoaderManager.LoaderCallbacks<Cursor> {
private static final String[] PROJECTION = new String[] { "_id", "fieldname" };
private static final int LOADER_ID = 0;
private static final String MYTABLE_BASEPATH = "MyTable_tbl";
private static final String AUTHORITY = "SQLData";
public static final Uri MY_URI = Uri.parse("content://" + AUTHORITY + "/" + MYTABLE_BASEPATH);
private SimpleCursorAdapter mAdapter;
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent myData = getIntent();
Bundle info = myData.getExtras();
if (info != null){
Cursor c; …Run Code Online (Sandbox Code Playgroud)