android - পুনর্ব্যবহারযোগ্য ভিউ ক্রিয়াকলাপের মধ্যে স্টোর/পুনরুদ্ধার




listview android-recyclerview (5)

আমি আমার তালিকাভিউগুলি পুনর্ব্যবহারযোগ্য ভিউগুলিতে স্থানান্তরিত করছি। তালিকার সাথে আমি ক্রিয়াকলাপের মধ্যে স্ক্রোল অবস্থান সংরক্ষণ এবং পুনরুদ্ধার করতে here বর্ণিত সাধারণ কৌশলটি ব্যবহার করেছি।

রিসাইকেলারভিউগুলির সাথে কীভাবে এটি করা যায়? RecyclerView.onSaveInstanceState() মনে হয় protected অ্যাক্সেস রয়েছে, তাই সরাসরি ব্যবহার করা যাবে না।


আপনি আপনার mRecyclerView একটি রিসাইক্লারউভিউ ( mRecyclerView ) এবং একটি mRecyclerView ( mRecyclerView ) সংজ্ঞায়িত করেছেন এবং এখন পর্যন্ত সব mLayoutManager কাজ করছে তা বিবেচনা করে আপনার mPosition অবস্থান ( mPosition ) সংরক্ষণ করার mPosition এরকম দেখাচ্ছে:

  1. চলক এবং ধ্রুবক ব্যবহৃত:

    private final String RECYCLER_POSITION_KEY = "recycler_position";
    private int mPosition = RecyclerView.NO_POSITION;
    private RecyclerView mRecyclerView;
    private LinearLayoutManager mLayoutManager;
    private static Bundle mBundleState;
  2. onPause পদ্ধতিতে:

    @Override
    protected void onPause()
    {
        super.onPause();
    
        // Save RecyclerView state
        mBundleState = new Bundle();
        mPosition = mLayoutManager.findFirstCompletelyVisibleItemPosition();
        mBundleState.putInt(RECYCLER_POSITION_KEY, mPosition);
    }
  3. অন onResume পদ্ধতিতে:

    @Override
    protected void onResume()
    {
        super.onResume();
    
        // Restore RecyclerView state
        if (mBundleState != null) {
            mPosition = mBundleState.getInt(RECYCLER_POSITION_KEY);
            if (mPosition == RecyclerView.NO_POSITION) mPosition = 0;
            // Scroll the RecyclerView to mPosition
            mRecyclerView.smoothScrollToPosition(mPosition);
        }
    }
  4. অন onSaveInstanceState পদ্ধতিতে:

    @Override
    public void onSaveInstanceState(Bundle outState) {
        // Save RecyclerView state
        outState.putInt(RECYCLER_POSITION_KEY,  mLayoutManager.findFirstCompletelyVisibleItemPosition());
    
        super.onSaveInstanceState(outState);
    }
  5. onRestoreInstanceState পদ্ধতিতে:

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        // Restore RecyclerView state
        if (savedInstanceState.containsKey(RECYCLER_POSITION_KEY)) {
            mPosition = savedInstanceState.getInt(RECYCLER_POSITION_KEY);
            if (mPosition == RecyclerView.NO_POSITION) mPosition = 0;
            // Scroll the RecyclerView to mPosition
            mRecyclerView.smoothScrollToPosition(mPosition);
        }
    
        super.onRestoreInstanceState(savedInstanceState);
    }

এটি আমার সমাধান, এটি আইটেম এবং পুনর্ব্যবহারযোগ্য অবস্থান উভয়ই পুনরুদ্ধার করে

1) onSaveInstanceState পদ্ধতিতে পুনর্ব্যবহারযোগ্য দর্শন রাষ্ট্রটি সংরক্ষণ করুন

@Override
protected void onSaveInstanceState(Bundle outState) {
    Parcelable listState = myRecyclerView.getLayoutManager().onSaveInstanceState();
    // putting recyclerview position
    outState.putParcelable(SAVED_RECYCLER_VIEW_STATUS_ID, listState);
    // putting recyclerview items
    outState.putParcelableArrayList(SAVED_RECYCLER_VIEW_DATASET_ID,mDataset);
    super.onSaveInstanceState(outState);
}

2) ওকেক্রিট পদ্ধতিতে সেভড ইনস্ট্যান্সস্টেট বান্ডিলটি পরীক্ষা করুন

@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (savedInstanceState==null){
            getRemoteData(); // No saved data, get data from remote
        }else{
            restorePreviousState(); // Restore data found in the Bundle
        }
    }

3) স্ক্রিনটি ঘোরানো হলে পুনর্ব্যবহারযোগ্য ভিউ ডেটা পুনরুদ্ধার করুন

public void restorePreviousState(){
    // getting recyclerview position
    mListState = mSavedInstanceState.getParcelable(SAVED_RECYCLER_VIEW_STATUS_ID);
    // getting recyclerview items
    mDataset = mSavedInstanceState.getParcelableArrayList(SAVED_RECYCLER_VIEW_DATASET_ID);
    // Restoring adapter items
    mAdapter.setItems(mDataset);
    // Restoring recycler view position
    mRvMedia.getLayoutManager().onRestoreInstanceState(mListState);
}

স্ক্রোল অবস্থানটি সংরক্ষণ এবং পুনরুদ্ধার করতে onPause() এবং onResume() এই কোডটি ব্যবহার করুন-

private Parcelable recyclerViewState;
recyclerViewState = mrecyclerView.getLayoutManager().onSaveInstanceState();//save
mrecyclerView.getLayoutManager().onRestoreInstanceState(recyclerViewState);//restore

recyclerView.getLayoutManager().onSaveInstanceState() আপনি যখন recyclerView.getLayoutManager().onSaveInstanceState() ব্যবহার করেন তখন নাল পরীক্ষা করতে ভুলবেন না:

@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);

    if (recyclerView != null) {
        outState.putParcelable(SCROLL_POSITION, recyclerView.getLayoutManager().onSaveInstanceState());
    }
}

public class MainActivity extends AppCompatActivity {
Parcelable recyclerViewState;
.......
@Override
    protected void onPause() {
        super.onPause();
        recyclerViewState = MainAnecdotesView.getLayoutManager().onSaveInstanceState();//save
    }
    @Override
    protected void onResume()
    {
        super.onResume();
        if(recyclerViewState!=null)
            MainAnecdotesView.getLayoutManager().onRestoreInstanceState(recyclerViewState);//restore
    }
}





android-recyclerview