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

Nec*_*net 5 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
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Chr*_*ins 7

如果你有一个内部类Fragment如:

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;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当FragmentActivity尝试重新启动它不会从它将从抽象FragmentActivity处理它的具体类中调用它的片段时,确保你的限定符是公共的,如果你的内部类Fragment是私有的,那么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在适当情况下.

希望这能解决一些未来的问题.