Как сохранить позицию ListView? - PullRequest
0 голосов
/ 23 марта 2019

У меня есть пользовательский ListView Я просто хочу сохранить позицию прокрутки, если пользователь хочет вернуться к активности просмотра списка. Я попробовал много ответов здесь, и ни один из них мне не помог.Вот мой код.

    lst = findViewById(R.id.listview);
    customListview customListview = new customListview(this, storynum, 
    storynam, imag);
    lst.setAdapter(customListview);

некоторые ответы, которые я тестировал

    public void saveLastPosition() {
    int position = lst.getLastVisiblePosition();

    SharedPreferences pref = 
    PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = pref.edit();
    editor.putInt("lastPosition", position);
    editor.apply();
    }

     public void getLastPosition() {
    int position = lst.getLastVisiblePosition();

    SharedPreferences pref = 

   PreferenceManager.getDefaultSharedPreferences(this);
    int lastPosition = pref.getInt("lastPosition", position);
    lst.setSelection(lastPosition);
}

это действие, которое пользователь нажимает спинойкнопка, чтобы вернуться к списку действий

            case R.id.bar_back:
            Intent intent = new Intent(this, ActivityS2.class);
            startActivity(intent);
            return true;

Редактировать logcat для этого метода

 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.widget.ListView.getLastVisiblePosition()' on a null object reference
    at com.slltour.desar.qasharirh.ActivityS2.getLastPosition(ActivityS2.java:251)
    at com.slltour.desar.qasharirh.ActivityS2.onCreate(ActivityS2.java:52)

И спасибо за любую помощь

1 Ответ

0 голосов
/ 23 марта 2019

Вы получаете нулевое значение из getLastPosition, потому что используете его перед инициализацией.

 lst.setAdapter(customListview);
 if(getLastPosition!=0)
 lst.smoothScrollToPosition(getLastPosition());

Измените свой метод следующим образом

public int getLastPosition() {
SharedPreferences pref = 
PreferenceManager.getDefaultSharedPreferences(this);
int lastPosition = pref.getInt("lastPosition", 0);
return lastPosition;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...