Android listfragment滚动到顶部

时间:2013-10-13 16:56:46

标签: java android android-fragments fragment android-listfragment

我有一个列表片段。

当用户点击列表项时,我用新闻片段替换列表片段。 当用户回来时(使用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();
    }
}

1 个答案:

答案 0 :(得分:0)

从视图层次结构中删除片段时,实际上会破坏视图,但不会破坏片段。所以当它重新连接时再次调用onCreateView。这就是为什么你的列表再次滚动到顶部。

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

这可能对更多细节有所帮助。 How can I maintain fragment state when added to the back stack?