onCreate 中的方法仅在设备旋转后运行
Method in onCreate runs only after device rotation
我的 Activity
使用 RecyclerView
来显示数据列表。此数据使用 AsyncTaskLoader
下载一些 Moview
。我在 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();
}
使用notifyDataSetChanged();
@Override
public void onLoadFinished(Loader<List<Movie>> loader, List<Movie> data) {
mMovieAdapter.clear();
if (data != null && !data.isEmpty()) {
mMovieAdapter.addAll(data);
mMovieAdapter.notifyDataSetChanged()
}
}
我的 Activity
使用 RecyclerView
来显示数据列表。此数据使用 AsyncTaskLoader
下载一些 Moview
。我在 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();
}
使用notifyDataSetChanged();
@Override
public void onLoadFinished(Loader<List<Movie>> loader, List<Movie> data) {
mMovieAdapter.clear();
if (data != null && !data.isEmpty()) {
mMovieAdapter.addAll(data);
mMovieAdapter.notifyDataSetChanged()
}
}