2012-03-21 40 views

回答

19

我终于解决了这个问题,所以我决定发布对他人的解决方案:

在我的ListFragment子类我声明两个int变量来保存滚动位置

public static class MyListFragment extends ListFragment { 

     ...................... 
      ...................... 
     private int index = -1; 
     private int top = 0; 
      ...................... 

然后覆盖onPause()和onResume()来保存和恢复ListView的滚动位置,如下所示:

@Override 
public void onResume() { 
     super.onResume(); 
     ...................... 
     ...................... 
     setListAdapter(mAdapter); 
     if(index!=-1){ 
     this.getListView().setSelectionFromTop(index, top); 
     } 
     ...................... 
     ...................... 

} 

@Override 
public void onPause() { 
     super.onPause(); 
     try{ 
     index = this.getListView().getFirstVisiblePosition(); 
     View v = this.getListView().getChildAt(0); 
     top = (v == null) ? 0 : v.getTop(); 
     } 
     catch(Throwable t){ 
     t.printStackTrace(); 
     } 
     ...................... 
     ......................      
} 

就是这样!我希望这对一个人有帮助。 :)

+0

不要你需要有setRetainInstance(真),以便能够保持整数那里的片段? – 2013-01-29 10:33:29

+0

但我onPause和onResume语句没有工作 – Vikky 2013-06-27 09:55:08

+0

为什么你捕捉'Throwable'? – 2014-04-11 03:01:16

0

尝试

listView.getFirstVisiblePosition() 
2

我认为你的解决方案适用于触摸模式,但对我来说这还不够。我需要得到在同一所选项目的选择,而不是第一个可见:

@Override 
public void onStop() { 
    super.onStop(); 
    ListView listView = this.getListView(); 
    lastPosition = listView.getSelectedItemPosition(); 
    int lastPositionInGroup = lastPosition - listView.getFirstVisiblePosition(); 
    lastTop = listView.getChildAt(lastPositionInGroup).getTop(); 
} 

@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
    /* cursor adapter stuff here */ 

    if (lastPosition != AdapterView.INVALID_POSITION) { 
     listView.setSelectionFromTop(
       lastPosition, 
       lastTop != AdapterView.INVALID_POSITION ? lastTop : 0 
     ); 
    } 
} 
0
@Override 
public void onResume() 
{ 
     super.onResume(); 
     if(CommonVariables.firstsel==6) 
     { 
      swipelistview.setAdapter(adapter_ct); 
      swipelistview.setSelection(CommonVariables.index); 
     } 
} 

@Override 
public void onPause() 
{ 
    super.onPause();   
    try 
    { 
     CommonVariables.firstsel=6; 
     CommonVariables.index = Fragmentct.swipelistview.getFirstVisiblePosition()+1;  
     Toast.makeText(getActivity(),"onPause"+CommonVariables.index,1500).show(); 
    } 
    catch(Throwable t){ 
     t.printStackTrace(); 
    }       
} 
相关问题