pacchetto compatibilità Android Frammento come classe statica interna
-
27-10-2019 - |
Domanda
Sto usando la compatibilità Android pacchetto ma ho incontrato il seguente problema, sembra che ogni volta che creo un frammento come una classe statica interna relativa alla mia domanda e cercare di iniziare che l'attività si visualizzano il seguente errore
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
E quando mi separo il frammento e l'attività funzionare tutto senza problemi, qualcuno sa perché? e come posso risolvere il problema?
Grazie!
Soluzione
Se si dispone di una classe Frammento interna come:
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;
}
}
}
Assicurati che il tuo qualificazione è pubblico , quando i tentativi FragmentActivity per iniziare nuovamente il frammento non chiama dalla classe concreta sarà gestirlo dal FragmentActivity astratto, e se la vostra classe interna frammento è privata la cui attività non ha alcun riferimento alla onSaveState, onRestoreState, inizializzazione etc ..
private
per public
fissato per me!
Aggiornamento:
Date un'occhiata al https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v4/java/android/support/v4/app/Fragment.java
Le chiamate di metodo instantiate
newInstance()
quando si cerca di ripristinare il Fragment
da uno stato salvato (in cui il frammento è stato completamente distrutto).
Il metodo richiede newInstance
classe che sia accessibile pubblicamente, così quando definita come una classe interna per questa ragione deve essere public
e static
all'occorrenza.
Spero che questo chiarisce alcune domande future.