【问题标题】:Method in onCreate runs only after device rotationonCreate 中的方法仅在设备旋转后运行
【发布时间】:2017-08-16 09:50:26
【问题描述】:

我的Activity 使用RecyclerView 显示数据列表。该数据使用AsyncTaskLoader 下载了一些Moviews。我在onCreate 中初始化了加载器,但是当我运行它时,我什么也看不到。但是,如果我单击按钮旋转设备,我会看到数据。我尝试将此方法放到其他生命周期方法中,但还是一样。而且日志一直都是一样的。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_movie);

    mMovieListRecyclerView = (RecyclerView) findViewById(R.id.rv_movieList);
    mGridLayoutManager = new GridLayoutManager(this, 2);
    mMovieListRecyclerView.setLayoutManager(mGridLayoutManager);
    mMovieAdapter = new MovieAdapter(this, new ArrayList<Movie>());
    mMovieListRecyclerView.setAdapter(mMovieAdapter);
    initialiseLoader();
}

private void initialiseLoader() {
    ConnectivityManager connectivityManager = (ConnectivityManager)
            getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

    if (networkInfo != null && networkInfo.isConnected()) {
        LoaderManager loaderManager = getLoaderManager();
        loaderManager.initLoader(MOVIE_LOADER_ID, null,  MovieActivity.this);
    }

我的装载机:

public class MovieLoader extends AsyncTaskLoader<List<Movie>> {

private static final String LOG_TAG = MovieLoader.class.getName();

private String mURL;

public MovieLoader(Context context, String url) {
    super(context);
    mURL = url;
}

@Override
protected void onStartLoading() {
    forceLoad();
}

@Override
public List<Movie> loadInBackground() {
    if (TextUtils.isEmpty(mURL)) {
        return null;
    }

    return QueryUtils.fetchMovieData(mURL);
}

    @Override
public void onLoadFinished(Loader<List<Movie>> loader, List<Movie> data) {
    mMovieAdapter.clear();
    if (data != null && !data.isEmpty()) {
        mMovieAdapter.addAll(data);
    }
}

@Override
public void onLoaderReset(Loader<List<Movie>> loader) {
    mMovieAdapter.clear();
}

【问题讨论】:

  • 适配器正在用一个空的ArrayList()初始化,加载过程完成后在哪里替换?
  • 你在使用 mMovieAdapter.notifyDataSetChanged(); asyncTask 加载数据后?
  • mMovieAdapter.addAll(data);之后添加mMovieAdapter.notifyDataSetChanged();它会工作
  • @akshay_shahane 谢谢!它有帮助:)

标签: android loader asynctaskloader


【解决方案1】:

使用notifyDataSetChanged();

@Override
public void onLoadFinished(Loader<List<Movie>> loader, List<Movie> data) {
    mMovieAdapter.clear();
    if (data != null && !data.isEmpty()) {
        mMovieAdapter.addAll(data);
        mMovieAdapter.notifyDataSetChanged()
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2017-05-29
    相关资源
    最近更新 更多