Как я могу изменить активность без изменения состояния предыдущей активности? - PullRequest
0 голосов
/ 04 мая 2018

Я сделал приложение для смены обоев с 3 различными действиями

  1. это список категорий
  2. список обоев определенной категории
  3. просмотреть и установить выбранные обои

Сценарий

Когда я, например, прокручиваю вниз в 1 °, до конца и нажимаю на категорию, я перехожу к 2 °, но когда я возвращаюсь, я ожидаю, что в конце 1 ° вместо этого я нахожу я в самом начале. (также 2 ° активность до 3 ° и обратно)

Так как я могу сохранить предыдущее состояние? Я использовал RecyclerView, чтобы составить список. (Я новичок на Android Studio, и извините за плохой английский не мой первый язык)

Если бы я не был достаточно ясен, есть мое приложение:

https://play.google.com/store/apps/details?id=yangxun.animewallpaper

Это код для списка обоев, активность 2 °

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

    Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
    toolbar.setTitle(Common.CATEGORY_SELECTED);
    setSupportActionBar(toolbar);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);

    recyclerView = (RecyclerView)findViewById(R.id.recycler_list_wallpaper);
    recyclerView.setHasFixedSize(true);
    GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
    recyclerView.setLayoutManager(gridLayoutManager);

    loadBackgroundList();

}

private void loadBackgroundList(){ //....
}

@Override
protected void onStart(){
    super.onStart();
    if(adapter!=null)
        adapter.startListening();
}

@Override
protected void onResume(){
    super.onResume();
    if(adapter!=null)
        adapter.startListening();
}

@Override
protected void onStop(){
    if(adapter!=null)
        adapter.stopListening();
    super.onStop();
}

@Override
public boolean onOptionsItemSelected(MenuItem item){
    if(item.getItemId()== android.R.id.home)
        finish(); //Close activity when click Back button
    return  super.onOptionsItemSelected(item);

}  

Вот мой адаптер

public MyFragmentAdapter(FragmentManager fm, Context context){
    super(fm);
    this.context = context;
}

@Override
public Fragment getItem(int position){
    if(position==0)
        return CategoryFragment.getInstance();
    else
        return null;
}

@Override
public int getCount(){
    return 1;
}

@Override
public CharSequence getPageTitle(int position) {
    switch (position) {
        case 0:
            return "Category";
    }
    return "";
}  

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Я просто изменяю

protected void onStop(){
    if(adapter!=null)
        adapter.stopListening();
    super.onStop();
}

до

protected void onStop(){
    super.onStop();
}

И все отлично работает! Спасибо за ваши советы

0 голосов
/ 04 мая 2018

Я полагаю, вы обновили список в Activity в onResume, чтобы вы получили новый список элементов, который прокручивается вверх. Это нормально.

Если вы не обновите список в onResume, все будет в порядке. Другой подход: сохранить индекс элемента, по которому щелкнули, и после того, как вы вернетесь в свой список, и он обновится, вызов: recyclerview.scrollToPosition(oldPosition)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...