paquet de compatibilité Fragment applications comme classe statique interne
-
27-10-2019 - |
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!
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.