アクティビティにonSaveInstanceState
を上書きして、オブジェクトのArrayList
を保存しています。そのアクティビティのonCreate
メソッドでは、私が保存したオブジェクトのリストを復元しました。 Iオブジェクトだけでなく、スクロール位置だけでなくが復元された画面を回転させる場合画面を回転させたときのスクロール位置の保存方法は?
public class MovieListActivity extends AppCompatActivity {
private EndlessRecyclerViewScrollListener scrollListener;
private ArrayList<Movie> movies;
private MovieListAdapter movieListAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_movie_list);
RecyclerView moviesRecyclerView = (RecyclerView) findViewById(R.id.movie_list_rv);
if (savedInstanceState == null || !savedInstanceState.containsKey("movieList")) {
movies = createMovies(30);
} else {
// Restoring only the list of movies not the scroll position
movies = savedInstanceState.getParcelableArrayList("movieList");
}
movieListAdapter = new MovieListAdapter(this, movies);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
moviesRecyclerView.setAdapter(movieListAdapter);
moviesRecyclerView.setLayoutManager(layoutManager);
scrollListener = new EndlessRecyclerViewScrollListener(layoutManager) {
@Override
public void onLoadMore(int page, final int totalItemsCount, RecyclerView view) {
Handler handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
movies.addAll(createMovies(20));
movieListAdapter.notifyItemRangeInserted(totalItemsCount, movies.size() - 1);
}
};
handler.post(r);
}
};
moviesRecyclerView.addOnScrollListener(scrollListener);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// Saving only the list of movies
outState.putParcelableArrayList("movieList", movies);
super.onSaveInstanceState(outState);
}
private ArrayList<Movie> createMovies(int numberOfMovies) {
ArrayList<Movie> movieList = new ArrayList<>();
for(int i=0; i<numberOfMovies; i++) {
movieList.add(new Movie("Hello", new DateTime("2017-03-16T01:20"), "This is a very good movie"));
}
Log.i("Create", "create called");
return movieList;
}
}
- ここ
活動からのコードです。
- スクロール位置が保存されずに復元されるのはどうしてですか?
super.onCreate(savedInstanceState)
を呼び出すとスクロール位置が自動的に保存されますか?エミュレータの
スクリーンショットの前と後の回転 - 助けを
感謝を回転させた後
&を回転させる前に!
ビューは独自の状態を保存します。リストビューは、どのアイテムが最初に目に見えるアイテムであるかを保存します。 – njzk2
@ njzk2しかし、画面を回転させるとアクティビティは再作成されませんか?どのようにビューが状態を保存するかについて私が読むことができるいくつかのリソースを教えてください。 –
再作成されますが、ビューの状態は保存され、自動的に復元されます。 – njzk2