【问题标题】:Getting the Bundle args in the onLoadFinished CursorLoader callback在 onLoadFinished CursorLoader 回调中获取 Bundle 参数
【发布时间】:2012-04-29 21:25:36
【问题描述】:

当我用

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

我想在

中获取捆绑包
 public void onLoadFinished(Loader<Cursor> loader, Cursor data)

但这似乎只能通过 onCreateLoader(...) 实现

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

谢谢!

【问题讨论】:

    标签: android


    【解决方案1】:

    我不会只在实现 LoaderCallbacks 的类中使用私有成员字段,因为您永远不知道究竟哪个加载器正在完成。最好按照提问者的建议进行操作,并将数据与加载程序一起存储。我是这样做的:

    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
    
      // ...
    }
    

    【讨论】:

      【解决方案2】:

      由于您使用“this”作为 onLoadFinished 的第三个参数,我假设该类正在实现 LoaderManager.LoaderCallbacks 接口。所以不需要参数,可以使用私有成员字段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 2017-09-18
        • 2019-10-31
        相关资源
        最近更新 更多