Question

Je me sers de la compatibilité Android Package mais je rencontrais la question suivante, il semble que chaque fois que je crée un fragment comme une classe statique intérieure sur mon application et essayer de commencer cette activité plus il affiche l'erreur suivante

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

Et quand je sépare le fragment et le tout activité de travail en douceur, quelqu'un sait pourquoi? et comment puis-je résoudre ce problème?

Merci!

Était-ce utile?

La solution

Si vous avez un fragment de classe interne comme:

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;
    }
  }
}

Assurez-vous que votre qualification est publique lorsque les essais de FragmentActivity à réamorcer le fragment il le fait pas appel de la classe en béton, il le traitera de la FragmentActivity abstraite, et si votre classe interne Fragment est l'activité privée n'a pas de référence à onSaveState, onRestoreState, etc .. Initialiser

private à public fixe pour moi!

Mise à jour:

Jetez un oeil à https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v4/java/android/support/v4/app/Fragment.java

Les appels de méthode instantiate newInstance() lorsque vous essayez de restaurer la Fragment d'un état enregistré (où le fragment a été complètement détruit).

La méthode de la classe newInstance nécessite d'être accessibles au public, de sorte que lorsqu'elle est définie comme une classe interne Cela signifie qu'il doit y avoir public et static le cas échéant.

L'espoir que cela éclaircit quelques questions à venir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top