如何保存ListView的滚动位置

时间:2015-05-14 09:33:49

标签: android

当我在ListView中选择一个项目时,如何保存ListView的滚动位置,并且我想在同一个ListView中返回。

假设我们有两个片段 - ListFragment和SomeOtherFragment。我们用SomeOtherFragment替换ListFragment。

    FragmentManager manager = getFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();

    transaction.replace(R.id.content_frame, fragment);
    transaction.addToBackStack(null);
    transaction.commit();

3 个答案:

答案 0 :(得分:9)

我知道的最佳解决方案

//将ListView状态(=包括滚动位置)保存为Parcelable

Parcelable state = listView.onSaveInstanceState();

//恢复以前的状态(包括选定的项目索引和滚动位置)

listView.onRestoreInstanceState(state);

即使将适配器设置为 -

,您也可以恢复上次保存的位置
// Save the ListView state (= includes scroll position) as a Parceble
Parcelable state = listView.onSaveInstanceState();

// e.g. set new items
listView.setAdapter(adapter);

// Restore previous state (including selected item index and scroll position)
listView.onRestoreInstanceState(state);

您还可以参考here了解更多详情。

答案 1 :(得分:2)

当您点击SELECT d.NAME ,ROUND(SUM(mf.size) * 8 / 1024, 0) Size_MBs ,(SUM(mf.size) * 8 / 1024) / 1024 AS Size_GBs FROM sys.master_files mf INNER JOIN sys.databases d ON d.database_id = mf.database_id WHERE d.database_id > 4 GROUP BY d.NAME ORDER BY d.NAME 行时,请保存在SharedPreference中的位置

$(function(){
window.editTweetvldtr = $("#frm-update-tweet").validate({
        rules: {
                ....
        },

        messages: {
              ....
        }
    });

  });

console.log( window.editTweetvldtr  ); //return  the obj 

ListFragment - &gt;回来时使用此功能<shared_pref_object>.putInt("scroll_position",position);

OtherFragment

将其设置为滚动位置:

ListFragment

答案 2 :(得分:0)

我真的很想知道为什么这个常见问题没有好的和优化的解决方案。正如我所看到的,每个人都以自己的方式解决了这个问题。但在尝试所有这些之后我想表达自己的方式:

在ListFragment中声明两个int变量来保存滚动位置:

TypedValue.COMPLEX_UNIT_SP

然后覆盖onPause()和onResume()以保存和恢复public static class MyListFragment extends ListFragment { private int listIndex = -1; private int listTop = 0; 的滚动位置,如下所示:

ListView

希望减轻痛苦! :脸红: