相关疑难解决方法(0)

片段onCreateView和onActivityCreated调用了两次

我正在使用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)

android android-fragments android-4.0-ice-cream-sandwich

96
推荐指数
5
解决办法
10万
查看次数

片段事务加载空视图但片段在旋转设备后显示

我正在构建一个由谷歌文档设计的导航抽屉,但我有一个问题,片段没有被替换.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)

android fragmenttransaction navigation-drawer

10
推荐指数
2
解决办法
2240
查看次数

屏幕旋转后保存片段状态

我试图处理保存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)

android screen-orientation android-fragments

5
推荐指数
2
解决办法
9694
查看次数

片段与活动轮换重叠

我对此非常困惑.我有一个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正在重新创建崩溃我的应用程序

是的,因为我正在使用替换?如何避免重新创建不再显示的片段,而不会失去对其进行反压的可能性?

android android-fragments

4
推荐指数
1
解决办法
2726
查看次数