- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在一项 Activity 中使用了一个装载机。我能够启动加载程序并调用 onLoadFinished。当我更新数据并在加载程序中调用 onContentChanged
时,我看到 loadInBackground
和 deliverResult
都被调用了。这是踪迹似乎停止的地方。我没有收到任何对 onLoadFinished
的回调。
如果我重新创建 Activity (也称为方向更改或重新启动),那么它的行为方式将相同。
我正在使用 support-v4 加载器和加载器管理器。
我的 SharedPreferenceLoader
基于 CommonsWare's loader :
public class SharedPreferencesLoader extends AsyncTaskLoader<SharedPreferences>
implements SharedPreferences.OnSharedPreferenceChangeListener {
private SharedPreferences prefs = null;
private static final String TAG = SharedPreferencesLoader.class.getSimpleName();
public SharedPreferencesLoader(Context context) {
super(context);
}
@Override
public SharedPreferences loadInBackground() {
Log.v(TAG, "wol: load in background");
prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
prefs.registerOnSharedPreferenceChangeListener(this);
return (prefs);
}
@Override
protected void onStartLoading() {
if (prefs != null) {
deliverResult(prefs);
}
if (takeContentChanged() || prefs == null) {
forceLoad();
}
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Log.v(TAG, "wol: on shared preference changed.");
onContentChanged();
}
}
加载器的使用方式如下:
public class MainActivity extends ActionBarActivity implements
LoaderManager.LoaderCallbacks<SharedPreferences> {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportLoaderManager().initLoader(0, null, this);
// fetch list of locations through an intent service.
// This will save data to shared preferences and trigger onContentChanged
MyIntentService.startActionGetLocations(this);
}
@Override
public Loader<SharedPreferences> onCreateLoader(int i, Bundle bundle) {
return new SharedPreferencesLoader(this);
}
@Override
public void onLoadFinished(final Loader<SharedPreferences> sharedPreferencesLoader, final SharedPreferences sharedPreferences) {
final List<PwStructure> locations = SharedPreferencesUtils.getLocations(sharedPreferences, this);
Log.v(TAG, "wol: on load finished: "+locations);
/* Do something with data. */
}
@Override
public void onLoaderReset(final Loader<SharedPreferences> sharedPreferencesLoader) {
}
}
更新我在 LoaderManager 中找到了这个资源。如果数据具有相同的引用,似乎不会调用 onLoadFinished
。
最佳答案
是的,在当前的 LoaderManager 实现中,SharedPreferencesLoader 似乎完全搞砸了。我会弃用它。
感谢您指出这一点!
关于android - 装载机 : onLoadFinished called only once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20619026/
我在一项 Activity 中使用了一个装载机。我能够启动加载程序并调用 onLoadFinished。当我更新数据并在加载程序中调用 onContentChanged 时,我看到 loadInBac
我正在尝试使用 liac-arff 库将 .arff 文件加载到 numpy 数组中。 ( https://github.com/renatopp/liac-arff ) 这是我的代码。 import
我最近在 three.js 中尝试了一些使用 Blender 和 Collada Loader 的实验。在我的 Blender 场景中,我有三个对象,但当然我只能使用 three.js 和加载器管理一
我正在通过 将 Parquet 数据加载到数据框中 spark.read.parquet('hdfs:///path/goes/here/...') 由于 parquet 分区,该路径中约有 50k
我是一名优秀的程序员,十分优秀!