হালনাগাদ
recyclerview:1.2.0-alpha02
মুক্তি থেকে শুরু StateRestorationPolicy
করা হয়েছে। এটি প্রদত্ত সমস্যার আরও ভাল পদ্ধতির হতে পারে।
এই বিষয়টি অ্যান্ড্রয়েড বিকাশকারীদের মাঝারি নিবন্ধে আচ্ছাদিত করা হয়েছে ।
এছাড়াও, @ রুবন-ভিগুয়েরা নীচের উত্তরে আরও বিশদ ভাগ করেছেন। https://stackoverflow.com/a/61609823/892500
পুরানো উত্তর
আপনি যদি লিনিয়ারলআউটআমনেজারটি ব্যবহার করে থাকেন তবে এটি প্রাক-বিল্ট সেভ এপি লিনিয়ারলয়আউট ম্যানেজারআইন্সটেন্স.অনসেভআইন্সট্যান্সস্টেট () এবং এপিআই লিনিয়ারলআউটআউট ম্যানেজারআইন্সটেন্স.অনস্টোরআইনস্ট্যান্সস্টেটটি পুনরুদ্ধার করে (...)
এটির সাহায্যে আপনি ফেরত পার্সলেবল আপনার আউটস্টেটে সংরক্ষণ করতে পারেন। যেমন,
outState.putParcelable("KeyForLayoutManagerState", linearLayoutManagerInstance.onSaveInstanceState());
, এবং আপনার সংরক্ষণ করা রাষ্ট্রের সাথে পুনরুদ্ধার অবস্থান পুনরুদ্ধার করুন। যেমন,
Parcelable state = savedInstanceState.getParcelable("KeyForLayoutManagerState");
linearLayoutManagerInstance.onRestoreInstanceState(state);
সব কিছু মুড়িয়ে দেওয়ার জন্য, আপনার চূড়ান্ত কোডটি দেখতে এমন কিছু দেখাচ্ছে
private static final String BUNDLE_RECYCLER_LAYOUT = "classname.recycler.layout";
/**
* This is a method for Fragment.
* You can do the same in onCreate or onRestoreInstanceState
*/
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
if(savedInstanceState != null)
{
Parcelable savedRecyclerLayoutState = savedInstanceState.getParcelable(BUNDLE_RECYCLER_LAYOUT);
recyclerView.getLayoutManager().onRestoreInstanceState(savedRecyclerLayoutState);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(BUNDLE_RECYCLER_LAYOUT, recyclerView.getLayoutManager().onSaveInstanceState());
}
সম্পাদনা করুন: আপনি গ্রিডলআউটআউট ম্যানেজারের সাথে একই অ্যাপসটিও ব্যবহার করতে পারেন, কারণ এটি লিনিয়ারলআউটআউট ম্যানেজারের একটি সাবক্লাস। পরামর্শের জন্য @ ওয়েগসহেনকে ধন্যবাদ
সম্পাদনা: মনে রাখবেন, আপনি যদি কোনও পটভূমির থ্রেডে ডেটাও লোড করে থাকেন তবে ওরিয়েন্টেশন পরিবর্তনের পরে অবস্থানটি পুনরুদ্ধার করার জন্য আপনাকে আপনার onPostExecute / onLoadFinished পদ্ধতিতে onRestoreInstanceState এ কল করতে হবে eg
@Override
protected void onPostExecute(ArrayList<Movie> movies) {
mLoadingIndicator.setVisibility(View.INVISIBLE);
if (movies != null) {
showMoviePosterDataView();
mDataAdapter.setMovies(movies);
mRecyclerView.getLayoutManager().onRestoreInstanceState(mSavedRecyclerLayoutState);
} else {
showErrorMessage();
}
}