0

我有一个列表片段。

当用户单击列表项时,我将列表片段替换为新闻片段。当用户返回时(使用addToBackStack),列表滚动到顶部。

当用户按下列表项时,我希望我的列表保持相同的滚动级别。这可能吗?我怎样才能得到这个结果?

这是我替换列表片段的代码:

myFragment myFragment = new myFragment();

    myFragment.setArguments(bundle);
                FragmentTransaction ft = getActivity().getSupportFragmentManager()
                        .beginTransaction();
                ft.replace(R.id.phone_container, myFragment);
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                ft.addToBackStack(null);
                ft.commit();

我已经尝试过这样的事情,但我没有得到任何结果:

public void onResume() {
    super.onResume();
    Log.i("log", "onResume()");

      setListAdapter(adapter);
      if(index!=-1){
         this.getListView().setSelectionFromTop(index, top);
      }
}

public void onPause() {
    super.onPause();
    Log.i("log", "onPause()");
    try {
        index = this.getListView().getFirstVisiblePosition();
        View v = this.getListView().getChildAt(0);
        top = (v == null) ? 0 : v.getTop();
    } catch (Throwable t) {
        t.printStackTrace();
    }
}
4

1 回答 1

0

当您从视图层次结构中删除片段时,您实际上会破坏视图而不是片段。因此,当它重新连接时,它会再次调用 onCreateView。这就是您的列表再次滚动到顶部的原因。

保存状态的方法是将其存储在实例变量中,然后再次使用 onCreateView 滚动到最后一个位置,就像您的代码一样(当然在适配器被填充之后)。

这可能有助于了解更多细节。 添加到后台堆栈时如何维护片段状态?

于 2013-10-13T17:15:34.973 回答