【问题标题】:LoaderManager doesn't triggered from subclassLoaderManager 不会从子类触发
【发布时间】:2017-12-22 18:19:31
【问题描述】:

我有 My MainActivity,它只是实现 LoaderManager

public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor>

在被覆盖的方法中,我为RecycleView 创建了一个new 适配器,例如:

@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
    return NYTLoader.newNYTInstance(this);
}

@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
    NYTAdapter adapter = new NYTAdapter(cursor, this);
    adapter.setHasStableIds(true);
    mRecyclerView.setAdapter(adapter);
    int columnCount = getResources().getInteger(R.integer.list_column_count);
    StaggeredGridLayoutManager sglm =
            new StaggeredGridLayoutManager(columnCount, StaggeredGridLayoutManager.VERTICAL);
    mRecyclerView.setLayoutManager(sglm);
}

@Override
public void onLoaderReset(Loader<Cursor> loader) {
    mRecyclerView.setAdapter(null);
}

现在在我的NYTAdapter 中,我再次 实现了LoaderManager

public class NYTAdapter extends RecyclerView.Adapter<NYTAdapter.ViewHolder> implements LoaderManager.LoaderCallbacks<Cursor>

创建另一个适配器:

@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
    Log.d(TAG, "onCreateLoader: ");
    return WeatherLoader.newAllWeatherInstance(context);
}

@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
    this.cursor = cursor;

    Log.d(TAG, "onLoadFinished: ");
    WeatherAdapter adapter = new WeatherAdapter(cursor, context);
    adapter.setHasStableIds(true);
    mRecyclerView.setAdapter(adapter);
    int columnCount = context.getResources().getInteger(R.integer.list_column_count);
    StaggeredGridLayoutManager sglm =
            new StaggeredGridLayoutManager(columnCount, StaggeredGridLayoutManager.HORIZONTAL);
    mRecyclerView.setLayoutManager(sglm);

}

@Override
public void onLoaderReset(Loader<Cursor> loader) {
    mRecyclerView.setAdapter(null);
}

但是问题是,NYTAdapter里面的覆盖方法没有触发,不知道为什么?

【问题讨论】:

  • 你确实在某个地方给loaderManager.initLoader打电话,对吧?
  • @kalabalik 我没有在适配器内部调用它,我怎么能调用它?
  • 签出this
  • @kalabalik 适配器类没有getLoaderManager
  • 在构造函数中传递给它的Context 实例上调用它。

标签: java android android-loadermanager android-loader


【解决方案1】:

您所要做的就是在您的活动或片段上调用getLoaderManager.initLoader

【讨论】:

  • Ups,我认为还有一个问题 YourActivity youractivity = (YourActivity) context; 和覆盖我班级中的方法导致问题,我不知道为什么。
  • 什么样的问题?请发布您的适配器的构造函数。
  • java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteQuery 指的是之前的数据
  • 我认为这个错误信息与你上面发布的代码没有任何关系。
  • 我想因为我在 mainActivity 中有onLoadFinish,在我的适配器中有onCreateLoader,这就像试图重新打开被 mainActivity 中的onLoadFinish 关闭的游标
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多