Сохраните положение RecylerView, когда мы перейдем к подробному описанию, щелкнув по списку элементов в RecyclerView, и восстановим его, когда мы вернемся к RecylerView. - PullRequest
0 голосов
/ 08 октября 2018

Как сохранить позицию прокрутки действия RecylerView при переходе к следующему действию сведений с помощью itemclicklistener из списка элементов (эти элементы извлекаются из Firebase JSON) в RecyclerView и восстановить позицию, когда мы вернемся к деятельности Recylerview, и я используюLinearLayoutManager

Пожалуйста, помогите мне заранее спасибо

Ответы [ 4 ]

0 голосов
/ 08 октября 2018

Вы можете использовать этот трюк:

int firstItemPos = mLayoutManager.findFirstVisibleItemPosition();
View v = mLayoutManager.findViewByPosition(firstItemPos);
int offsetPixel = 0;
if(v != null) offsetPixel = v.getTop();

А затем при восстановлении позиции:

mLayoutManager.scrollToPositionWithOffset(firstItemPos, offsetPixel)

firstItemPos и ​​offsetPixel вы можете сохранить в дополнительном пакете действий.mLayoutManager в моем примере я использую обычный LinearLayoutManager и задаю для него режим просмотра корзины:

mLayoutManager = new LinearLayoutManager(getActivity())
0 голосов
/ 08 октября 2018

сохранить состояние при действии по методу onPause и восстановить его по методу onResume() См. Код

 public class Activity extends AppCompatActivity
 {
    private final String STATE = "recycler_state";
    private RecyclerView mRecyclerView;
    private static Bundle mBundle;

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

        mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);//set to whatever view id you use
        // don't forget to set your adapter
    }

    @Override
    protected void onPause()
    {
        super.onPause();

        // save RecyclerView state

        mBundle = new Bundle();
        Parcelable listState = mRecyclerView.getLayoutManager().onSaveInstanceState();
        mBundle.putParcelable(STATE, listState);
    }

    @Override
    protected void onResume()
    {
        super.onResume();

        // restore RecyclerView state
        if (mBundle != null) {
            Parcelable listState = mBundle.getParcelable(STATE);
            mRecyclerView.getLayoutManager().onRestoreInstanceState(listState);
        }
    }
}
0 голосов
/ 08 октября 2018

Мне не совсем понятен ваш вопрос.Я предположил, что ваша текущая активность была разрушена, когда вы переходите к следующей детали, таким образом, воссоздайте активность, когда вы вернетесь.Не звоните finish, когда вы переходите к следующей детали, и просто звоните onBackPressed, чтобы вернуться к предыдущему занятию.Это сохранит ваше состояние и положение реселлера.

В любом случае, вы можете использовать Общие настройки , чтобы сохранить позицию перед тем, как перейти к следующей детали и вернуть ее на onResume.

0 голосов
/ 08 октября 2018

Постановка проблемы неясна.Тем не менее я пытаюсь ответить.

Предполагается, что вы начинаете новую активность по щелчку списка.В соответствии с жизненным циклом активности фоновая активность останется в том же состоянии со свитком.Когда вы завершите новое действие, оно снова будет в том же состоянии.

Это может произойти по следующим причинам:

  1. Вы перезагружаете данные с помощью метода onResume.Вы должны загрузить данные в onCreateView.
  2. Вы запускаете фоновое действие из второго действия.
...