0

我有一个列表片段。Android的listfragment滚动到顶部

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

我想我的列表保持在相同的滚动水平,当用户按下列表item..is那可能吗?我怎么能得到这个结果?

这是我的代码,我更换名单片段:

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(); 
    } 
} 
+0

不是它的重复。 – DArkO

回答

0

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

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

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

+0

我可以为此提供一些代码吗? :) –

+0

我不能写你需要的特定代码。但很简单,您已经将索引保存在onResume方法中。只需等待数据加载到列表中,然后使用适配器恢复它,而不是使用onResume()。最初,您的索引值为0.只需按照您希望在首次显示屏幕时加载到特定索引的方式编写索引。 – DArkO

+0

其实,当我回到我的listView时,我可以看到列表项中的小图像闪烁一秒。这是否意味着什么? –