【问题标题】:How to set listview position when back button press?按下后退按钮时如何设置列表视图位置?
【发布时间】:2013-12-20 11:42:56
【问题描述】:

我正在单击列表视图项目时打开新活动,我按下返回按钮我想将列表视图设置在同一位置。例如,我在列表视图中单击 25 项,当我返回列表视图时显示第一个元素,我想在列表视图中显示 25 项。

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

    使用 Fragment 包装您的 Listview。设置setRetainInstance(true) 以便在恢复实例后自动恢复所有属性。您无需再次使用 Bundles。然后保存第一个可见项的位置和偏移量以恢复准确的位置。 (如果您不使用 Fragments,则需要将 topindex 存储在 bundle 中)

    private int top;
    private int index; 
    
    @Override onPause(){
      int index = mList.getFirstVisiblePosition();
      View v = mList.getChildAt(0);
      int top = (v == null) ? 0 : v.getTop();
      super.onPause();
    }
    
    @Override onResume(){
      super.onResume();
      mList.setSelectionFromTop(index, top);
    }
    

    看看here

    【讨论】:

    • 感谢您的建议。效果很好!
    【解决方案2】:

    存储位置并在按下后退键时设置它

    @Override
    
    public boolean onKeyDown (int keyCode, KeyEvent event) {
    
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        listview.setSelection(position);
        return true;
    }
    
    return super.onKeyDown(keyCode, event);
    }
    

    【讨论】:

    • 当滚动列表视图到底部从服务器获取数据(如 10 10 记录)时,列表的数据不会出现
    【解决方案3】:

    您可以将最后点击位置存储在某处并在后按 ....in onresume() ...执行此操作..

    对于直接滚动:

    getListView().setSelection(21);
    

    为了平滑滚动:

    getListView().smoothScrollToPosition(21);
    

    【讨论】:

      【解决方案4】:

      当从一个listview遍历时,源activity的onPause()方法被调用。您可以通过在末尾添加以下行来维护listview的状态:

      index = list.getFirstVisiblePosition();
      

      在源活动的 on resume(onResume()) 中,在末尾添加以下行:

      list.setSelectionFromTop(index, 0);
      

      这应该可以解决问题。

      【讨论】:

      • 当滚动列表视图到底部从服务器获取数据(如 10 10 记录)时,列表的数据不会出现
      【解决方案5】:

      使用 ListView.setSelection(int position) 方法。它将选择指定位置的列表项,但前提是不在触摸模式下。如果在触摸模式下,它只会滚动到指定位置,以便该位置的项目是屏幕上的第一个。

      【讨论】:

        【解决方案6】:

        在 onPause() 方法中:

        index = listView.getFirstVisiblePosition();

        在 onResume() 方法中:

        listView.setSelection(index);

        除此之外,还必须确认:setSelection(int position)方法在listView的setAdapter()之后被调用,否则listView会被重置。

        【讨论】:

          猜你喜欢
          • 2021-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多