如何保存ListView的位置?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何保存ListView的位置?相关的知识,希望对你有一定的参考价值。

我有自定义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;

Edit logcat for this method

 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)

并感谢您的帮助

答案

您从“获取最后位置”获取空值,因为您在初始化之前使用它。

 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;
}

以上是关于如何保存ListView的位置?的主要内容,如果未能解决你的问题,请参考以下文章

检索数据未出现在 ListView 的片段中

如何在另一个 Fragment 中更新 ListView?

回到之前的片段(如 ListView)后,我可以保持 ScrollView 的位置吗?

从片段向数据库中插入值时ListView不更新

在Fragments中保存和恢复ListView(livedata)

如何在应用重新启动之间保存和恢复 Flutter ListView 的滚动位置?