Android兼容包Fragment作为内部静态类

时间:2011-09-07 04:57:27

标签: android android-fragments

我一直在使用Android兼容包但我遇到了以下问题,似乎每当我在我的应用程序上创建一个Fragment作为内部静态类并尝试启动该活动时它会显示以下错误

android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment org.wr.CreditCardHolderActivity.CreditCardHolderFragment: make sure class name exists, is public, and has an empty constructor that is public

当我将片段和活动分开时,一切顺利,任何人都知道为什么?我该如何解决?

谢谢!

1 个答案:

答案 0 :(得分:7)

如果你有一个内部类片段,如:

public class SomethingFragment extends Fragment {    
  public static final class TypeFragment extends BaseFragment
  {

    public static Fragment newInstance()
    {
        return new TypeFragment();
    }

    private View mRootView;
    private ListView mListView;

    /**
     * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater,
     *      android.view.ViewGroup, android.os.Bundle)
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState)
    {
        mRootView = inflater.inflate(R.layout.fragment_category_list, container, false);
        mListView = (ListView) mRootView.findViewById(R.id.fragment_listview);
        return mRootView;
    }
  }
}

当FragmentActivity尝试重新启动它不会从它将从抽象FragmentActivity处理它的具体类中调用它的片段时,确保你的限定符是 public ,如果你的内部类Fragment是private,Activity没有引用onSaveState,onRestoreState,初始化等。

privatepublic为我修复了它!

<强>更新

查看https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v4/java/android/support/v4/app/Fragment.java

当尝试从已保存状态(片段被完全销毁的位置)恢复instantiate时,newInstance()方法调用Fragment

newInstance方法要求类可公开访问,因此当定义为内部类时,这意味着它必须在publicstatic处适当。

希望这能解决以后的一些问题。