sai*_*kat 12 java android fragment android-listview
这是一种情况.我想从片段A-> B-> C导航.
在B片段中有listview.单击项目时,打开详细视图C Fragment.当然我使用了替换方法并添加了addtoBackStack(null),而事务从B到C,所以在Back上按下它返回到B.
一切顺利.但是当我从C返回B时,视图正在刷新,因此再次调用web服务.我不想这样做.我想用listview保留B Fragment状态.
我得到了一些Retain Instance的帖子,但它并没有那么多帮助.
任何帮助深表感谢.
谢谢.
ale*_*lex 12
如此处所述,您可以使用onSaveInstanceState()将数据保存在Bundle中,并在onRestoreInstanceState()方法中检索该数据.
通常提到setRetainState(true)作为将ui状态保持在片段中的方式,但它不适合您,因为您正在使用backstack.
所以一个好方法可能是将onSaveInstanceState()中的scrollposition保存并在onRestoreInstanceState()中恢复它,如下所示:
public class MyListFragment extends ListFragment {
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
int index = this.getListView().getFirstVisiblePosition();
View v = this.getListView().getChildAt(0);
int top = (v == null) ? 0 : v.getTop();
outState.putInt("index", index);
outState.putInt("top", top);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
[...]
if (savedInstanceState != null) {
// Restore last state for checked position.
index = savedInstanceState.getInt("index", -1);
top = savedInstanceState.getInt("top", 0);
}
if(index!=-1){
this.getListView().setSelectionFromTop(index, top);
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以在此处找到更详细的类似示例.
| 归档时间: |
|
| 查看次数: |
10346 次 |
| 最近记录: |