【问题标题】:how to save List-view position when back to previous Activity in Android回到Android中的上一个Activity时如何保存列表视图位置
【发布时间】:2016-04-11 09:42:34
【问题描述】:

我有一个包含大量数据的 ListView。但是当我转到 ListView 项目的下一页时,单击并返回 ListView。 我希望将列表滚动到与之前相同的位置。有人可以帮助实现这一目标吗?

我试过这段代码。列表滚动到同一点但立即来到第一个位置。

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

【问题讨论】:

    标签: android android-layout listview android-studio scrollview


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 表示不调用此方法 adapter.notifyDataSetChanged();
      • 是的,不要调用那个方法。当您移回listivew时,它将保持相同的位置。 @p.ld
      • 但这仅用于 backpressed() 以及其他按钮,如简单按钮,如 previous_button。
      • 在 previous_button 上,您必须使用 backpressed()。所以只想说在返回listiview时不要刷新listview,这样你的位置就不会在listview中改变。 @p.ld
      • 我已经删除了这个 adapter.notifyDataSetChanged();并且列表工作正常,但是当我按下某个按钮并在该单击上转到相同位置的上一个列表时,如何工作。但是在previous_button上不理解这一点,你必须使用backpressed()。
      【解决方案3】:

      您可以跟踪 saveInstanceState 中的位置,然后在您返回相同的活动时获取相同的位置(如果您正在销毁活动)或 当您单击该项目时,您可以保存位置并使用它(如果您不破坏活动)。

      然后,一旦你有了位置,你就可以使用:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-09
          • 1970-01-01
          • 2011-11-30
          相关资源
          最近更新 更多