在方向更改后在列表视图中恢复项目和滚动位置

问题描述 投票:0回答:1

[我尝试通过多种方式在用户旋转手机时恢复列表视图的数据。但是,由于以下事实,我遇到了一些困难,因为当我旋转屏幕一次时,它可以工作,但是当我翻转屏幕时,再一次,它不再起作用。此外,我尝试恢复滚动位置,但没有成功。

所以我想知道最好的方法。


我的代码:

private ListView item_container;
private ArrayList<Song.Hits> values;

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

    item_container = findViewById(R.id.bottom_popup_container);
}

当我完成从API检索数据时,将它们加载到列表视图中(并保存数据):

@Override
public void onRequestFinish(ArrayList<Song.Hits> hits) {
    if (!hits.isEmpty()) {
        CAdapter adapter = new CAdapter(hits);
        item_container.setAdapter(adapter);
        values = adapter.getHits();
    };
}

最后,我覆盖了这两种方法以保存列表视图的位置和项目。

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        outState.putParcelableArrayList("list",  values);
        outState.putParcelable("pos", item_container.onSaveInstanceState());
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
            ArrayList<Song.Hits> values = savedInstanceState.getParcelableArrayList("list");
            if (values != null) {
                CAdapter adapter = new CAdapter(values);
                item_container.setAdapter(adapter);
                item_container.onRestoreInstanceState(savedInstanceState.getParcelable("pos"));
            }
    }
android listview adapter orientation restore
1个回答
0
投票

您还应该更新OnCreate方法或重写OnPostCreate方法,并在检查saveInstanceState!= null时添加您在onRestoreInstanceState中使用的逻辑!>

© www.soinside.com 2019 - 2024. All rights reserved.