android - fragment 引起的屏幕旋转时 Activity 崩溃

标签 android android-fragments android-actionbar

我有一个包含 4 个 fragment 的 Activity 。在屏幕旋转时, Activity 崩溃并显示以下内容:

04-01 16:43:46.670: E/AndroidRuntime(2401): Caused by: java.lang.InstantiationException: can't instantiate class com.example.activity.FragmentActivity$UserFragment; no empty constructor
04-01 16:43:46.670: E/AndroidRuntime(2401):     at java.lang.Class.newInstanceImpl(Native Method)
04-01 16:43:46.670: E/AndroidRuntime(2401):     at java.lang.Class.newInstance(Class.java:1319)
04-01 16:43:46.670: E/AndroidRuntime(2401):     at android.app.Fragment.instantiate(Fragment.java:574)

我看过这个question这表示必须将 fragment 类声明为公开的。它被宣布为 public,但并没有解决问题。

以下是我的代码:

public class FragmentActivity extends Activity
{
    public class TabListener implements ActionBar.TabListener
    {
        private Fragment mFragment;

        public TabListener(Fragment fragment)
        {
           mFragment = fragment;
        }

        public void onTabSelected(Tab tab, FragmentTransaction ft)
        {
           ft.add(R.id.fragmentContainer, mFragment, null);
        }

        public void onTabUnselected(Tab tab, FragmentTransaction ft)
        {
           ft.remove(mFragment);
        }

        public void onTabReselected(Tab tab, FragmentTransaction ft)
        {
        }
    }

    public class UserFragment extends Fragment
    {
       @Override
       public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
       {
         .....
         ..... 
       }
    }

    @Override
    public void onCreate(android.os.Bundle savedInstanceState)
    {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.fragment_container);

       ActionBar actionBar = getActionBar();
       actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
       Tab userTab = actionBar.newTab();
       userTab.setIcon(R.drawable.person).setTabListener(new TabListener(new UserFragment()));
       actionBar.addTab(userTab);
   }
}

最佳答案

UserFragment 必须是静态嵌套类才能重新实例化:

public static class UserFragment extends Fragment { 
     ....
}

关于android - fragment 引起的屏幕旋转时 Activity 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9969482/

相关文章:

android - 在 Android 中检测溢出菜单中的点击?

android - 如何创建新的 LinkedIn 应用程序风格的 ActionBar,其中包含选项卡?

android - remoteMediaPlayer.requestStatus(...) 返回状态代码 SIGN_IN_REQUIRED

android - 更改 ListView 单元格不透明度

Java validator ?

java - Android studio Java - map 上的底页 View

java - Viewpager 在 fragment 内不可见

Android 没有菜单项显示在操作栏中

android - 如何创建在用户向上滚动时覆盖全部 Activity 的底页效果

java - HandlerThread 没有在后台运行?