J'essaie de parcourir le tutoriel google sur la construction d'une bonne architecture ap . J'utilise Java 8 et le SDK 26 . Voici le code que j'ai jusqu'à présent:
package test.me;
import Android.app.Fragment;
import Android.Arch.lifecycle.ViewModel;
import Android.Arch.lifecycle.ViewModelProviders;
import Android.os.Bundle;
import Android.support.annotation.Nullable;
public class ChronoFragment extends Fragment {
private ViewModel my_model;
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
my_model = ViewModelProviders.of(this).get(ViewModel.class); // <-- error on this
// and so on
}
}
Le problème est que jusqu'à présent, le SDK renvoie l'erreur suivante:
Cannot resolve the method 'of(test.me.ChronoFragment)'.
Je ne comprends pas ça depuis
ChronoFragment
est de type FragmentUne idée sur ce que je fais mal?
Les composants d'architecture utilisent appcompat Fragment
de la bibliothèque de support plutôt que la bibliothèque native. Essayez de changer votre import pour Fragment
en
import Android.support.v4.app.Fragment;
Pour des raisons historiques, il existe deux classes Fragment
différentes. Ils ont les mêmes fonctionnalités mais existent dans deux packages différents. Pour plus de détails, voir Pourquoi existe-t-il deux classes de fragments dans Android?
Au 6 février 2019:
Il existe maintenant une troisième classe Fragment
. Si vous utilisez les nouvelles bibliothèques AndroidX, alors faites
import androidx.fragment.app.Fragment;
Veillez à utiliser la classe Fragment
correcte, qui est cohérente avec le reste de vos dépendances.
J'ai eu le même problème, ce que la documentation de Google ne vous dit pas, c'est que vous devez ajouter les dépendances suivantes dans votre fichier Build Gradle, puis "Sync".
implementation "Android.Arch.lifecycle:extensions:1.1.1"
annotationProcessor "Android.Arch.lifecycle:compiler:1.1.1"
J'ai eu le même problème, le studio Android importait automatiquement Android.support.v4.app.Fragment;
mais j'utilisais Android. si votre situation est la même, vous devez utiliser androidX imports partout
import androidx.fragment.app.Fragment;