android - 在 onLoadFinished CursorLoader 回调中获取 Bundle args

标签 android

当我用

启动游标加载器时
 Bundle bundle = new Bundle();
 bundle.putInt("arg", 123);
 getLoaderManager().restartLoader(0, bundle, this);

我想在

中获取 bundle
 public void onLoadFinished(Loader<Cursor> loader, Cursor data)

但这似乎只有 onCreateLoader(...) 才有可能

我能想到的唯一解决方法是继承 CursorLoader 并添加一些字段以在加载到 onLoadFinished(...) 时持久保存数据

谢谢!

最佳答案

我不会只在实现 LoaderCallbacks 的类中使用私有(private)成员字段,因为您永远不知道哪个加载器正在完成。最好按照提问者的建议去做,并用加载程序存储数据。这是我的做法:

public static class CursorWithData<D> extends CursorWrapper {
  private final D mData;

  public CursorWithData(Cursor cursor, D data) {
    super(cursor);
    mData = data;
  }

  public D getData() {
    return mData;
  }
}

@Override
public Loader<Cursor> onCreateLoader(int id, final Bundle bundle) {
  // ...

  return new CursorLoader(getActivity(), uri, projection, selection, args, order) {
    @Override
    public Cursor loadInBackground() {
      return new CursorWithData<Bundle>(super.loadInBackground(), bundle);
    }
  };
}

@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
  CursorWithData<Bundle> cursorWithData = (CursorWithData<Bundle>) cursor;
  Bundle args = cursorWithData.getData();
  cursor = cursorWithData.getWrappedCursor(); // Optional if you are worried about performance

  // ...
}

关于android - 在 onLoadFinished CursorLoader 回调中获取 Bundle args,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10376106/

相关文章:

android - 将日历对象添加到 ParseObject

java - Android线程刚刚停止

android - 无法访问 'setContent' : it is internal in 'androidx.compose.ui.platform'

android - 我如何知道 Webrtc 修订版和版本号?

android - 如何使用 OpenGL ES 将纹理加载到圆上

android - 从textview中获取文本以在android中的字符串中显示

java - 如何读取 strings.xml 作为文件?

android - Exoplayer 正在使用 PageTransformer 移除预览

java - 如何对 drupal 表执行 Volley PUT

android - 延长 Android 应用程序证书过期