如何在返回 Android 中的上一个 Activity 时保存列表视图位置

how to save List-view position when back to previous Activity in Android

当我转到 ListView 项目的下一页并返回到 ListView 时,我有一个包含大量 data.But 的 ListView。 我希望列表滚动到与之前相同的点。有人可以帮助实现这一点吗?

我试过 code.List 滚动到同一点但立即到达第一个位置。

private void populateList() {
        descArray.clear();
        List<All_Post> allDesc = dbhelper.getAllDescriptions();
        for (All_Post all_Post : allDesc)
        {
            descArray.add(all_Post);
        }

        if (adapter == null)
        {
            adapter = new AllPostAdapter(this, R.layout.allpostlist, descArray);
            listView.setAdapter(adapter);
        }
        else if (adapter != null) {


            adapter.notifyDataSetChanged();
            adapter = new AllPostAdapter(this, R.layout.allpostlist, descArray);
            listView.setAdapter(adapter);
            //int firstPosition = listView.getFirstVisiblePosition();
            //listView.setSelection(firstPosition);

            int index = listView.getFirstVisiblePosition();
            View v = listView.getChildAt(0);
            int top = (v == null) ? 0 : (v.getTop() - listView.getPaddingTop());
            listView.setSelectionFromTop(index, top);
        }
    }

您可以在 listViewOnItemClickListener 中保存列表视图项点击的位置。 当您返回 listView 并使用

滚动到该位置时使用该位置
- listView.smoothScrollToPosition (position)

这是默认的 属性 列表视图。

if you move to next page on ListView Item Click and come back to ListView it will show same position.

请记住一件事,您不应该在 backpressed() 时或返回列表视图时或您用来返回到的任何其他方式时刷新列表视图列表视图 .

您可以跟踪 saveInstanceState 中的位置,然后在返回相同的 activity 时获取相同的位置(如果您正在破坏 activity)或者 当你点击物品时,你可以保存位置并使用它(如果你没有销毁activity)。

那么,一旦你有了位置,你就可以使用:

要直接滚动,请使用: getListView().setSelection(位置);

要平滑滚动,请使用: getListView().smoothScrollToPosition(位置);

试试这个:public int pos_clicked = -1; on list view item click : pos_clicked = listView.getFirstVisiblePostion();

回来时:if(pos_clicked != -1) listView.setSelection(pos_clicked);