3 回答
TA贡献1827条经验 获得超4个赞
您每次在活动中打开屏幕时都在创建一个新的片段,onCreate();但是您也要使用来维护旧的片段super.onCreate(savedInstanceState);。因此,也许设置标签并找到片段(如果存在),或者将空束传递给super。
这花了我一些时间来学习,当您使用诸如viewpager之类的东西时,它确实可以说是一个烂摊子。
我建议您多花一些时间阅读有关片段的内容,因为涉及到了这个确切的主题。
这是一个如何在规则的方向变化中处理碎片的示例:
活动内容:
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
TestFragment test = new TestFragment();
test.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().replace(android.R.id.content, test, "your_fragment_tag").commit();
} else {
TestFragment test = (TestFragment) getSupportFragmentManager().findFragmentByTag("your_fragment_tag");
}
}
}
片段:
public class TestFragment extends Fragment {
public static final String KEY_ITEM = "unique_key";
public static final String KEY_INDEX = "index_key";
private String mTime;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_layout, container, false);
if (savedInstanceState != null) {
// Restore last state
mTime = savedInstanceState.getString("time_key");
} else {
mTime = "" + Calendar.getInstance().getTimeInMillis();
}
TextView title = (TextView) view.findViewById(R.id.fragment_test);
title.setText(mTime);
return view;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("time_key", mTime);
}
}
TA贡献1828条经验 获得超6个赞
可以在android准则中找到有关如何在方向变化和活动娱乐之间保留数据的良好准则。
摘要:
使您的片段可保留:
setRetainInstance(true);
仅在必要时创建新片段(或至少从中获取数据)
dataFragment = (DataFragment) fm.findFragmentByTag("data");
// create the fragment and data the first time
if (dataFragment == null) {
- 3 回答
- 0 关注
- 442 浏览
添加回答
举报