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!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top