我正在使用Android 4.0 ICS和片段开发应用程序.
考虑ICS 4.0.3(API级别15)API的演示示例应用程序中的此修改示例:
public class FragmentTabs extends Activity {
private static final String TAG = FragmentTabs.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ActionBar bar = getActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
bar.addTab(bar.newTab()
.setText("Simple")
.setTabListener(new TabListener<SimpleFragment>(
this, "mysimple", SimpleFragment.class)));
if (savedInstanceState != null) {
bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
Log.d(TAG, "FragmentTabs.onCreate tab: " + savedInstanceState.getInt("tab"));
Log.d(TAG, "FragmentTabs.onCreate number: " + savedInstanceState.getInt("number"));
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("tab", getActionBar().getSelectedNavigationIndex());
}
public static class TabListener<T extends Fragment> implements ActionBar.TabListener { …Run Code Online (Sandbox Code Playgroud) 我正在构建一个由谷歌文档设计的导航抽屉,但我有一个问题,片段没有被替换.http://developer.android.com/training/implementing-navigation/nav-drawer.html
应用程序首次加载时,将加载默认片段.单击抽屉列表上的另一个项目会留下空视图但是在旋转设备时,会加载所选的片段.
public void selectNavActivty(int position){
// TODO Changing between the different screens selection
fragment = null;
switch (position) {
case 0:
fragment = OverLay.newInstance();
break;
case 1:
fragment = Dummy.newInstance();
break;
}
if(fragment != null) {
// attach added to handle viewpager fragments
FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
trans.replace(R.id.content_frame, fragment).attach(fragment)
.addToBackStack(null);
trans.commit();
getFragmentManager().executePendingTransactions();
} else {
Log.d("Drawer Activity","Error in creating Fragment");
}
}
Run Code Online (Sandbox Code Playgroud) 我试图处理保存fragment状态以避免屏幕旋转时出现问题.它发生了一件奇怪的事情:当我第一次旋转屏幕时一切正常,但是当我第二次旋转屏幕应用程序崩溃时:
这里是片段代码的一部分
//save information: a string and an image
@Override
public void onSaveInstanceState(Bundle bundle) {
super.onSaveInstanceState(bundle);
bundle.putString("namesurname", nameSurnameString);
bundle.putParcelable("imgprofile", bitmap);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
//Restore the fragment's state
this.nameSurname.setText(getArguments().getString("namesurname"));
this.profileImage.setImageBitmap((Bitmap)getArguments().getParcelable("imgprofile"));
}
}
Run Code Online (Sandbox Code Playgroud)
这里有部分活动代码
//save the fragment
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//THE NEXT ONE IS LINE THAT RAISES THE EXCEPTION WHEN I ROTATE THE SCREEN
//FOR THE SECOND TIME
getSupportFragmentManager().putFragment(outState, "profileFragment", profileFragment);
}
@Override
protected void onCreate(Bundle …Run Code Online (Sandbox Code Playgroud) 我对此非常困惑.我有一个actionbar列表导航.我点击列表fragment一个接一个地打开2 并显示在同一个活动中.我基本上用这种方法替换它们:
public void openFragment(AprilAppsFragment createdFragment){
if (createdFragment.getClass().isInstance(getDisplayedFragment()))
return;
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.replace( R.id.main_fragment, createdFragment, "displayed fragment");
transaction.addToBackStack(null);
transaction.commit();
}
Run Code Online (Sandbox Code Playgroud)
我打开片段A,然后打开片段B,然后旋转屏幕.片段A正在重新创建崩溃我的应用程序
是的,因为我正在使用替换?如何避免重新创建不再显示的片段,而不会失去对其进行反压的可能性?