L'appel de getSupportFragmentManager().getFragments()
affiche une erreur de compilation avec le message ci-dessous:
getSupportFragmentManager (). getFragments () ne peut être appelé qu'à partir du même groupe de bibliothèques (groupId = com.Android.support)
J'ai importé les classes suivantes dans MainActivity
:
import Android.os.Bundle;
import Android.support.annotation.NonNull;
import Android.support.design.widget.BottomNavigationView;
import Android.support.v4.app.Fragment;
import Android.support.v4.app.FragmentManager;
import Android.support.v4.app.FragmentTransaction;
import Android.support.v7.app.AppCompatActivity;
import Android.util.Log;
import Android.view.MenuItem;
import Android.widget.Toast;
MainActivity
étend AppCompatActivity
.
Mon niveau de module de projet build.gradle
fichier est comme suit:
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.mycompany.floatingdemo"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.Android.support', module: 'support-annotations'
})
compile 'com.Android.support:appcompat-v7:25.2.0'
compile 'com.Android.support:design:25.2.0'
compile 'com.Android.support:support-vector-drawable:25.2.0'
testCompile 'junit:junit:4.12'
}
Ceci est le code source de la méthode getFragments
inside FragmentManager.Java
.
/**
* Get a list of all fragments that have been added to the fragment manager.
*
* @return The list of all fragments or null if none.
* @hide
*/
@RestrictTo(LIBRARY_GROUP)
public abstract List<Fragment> getFragments();
J'ai récemment mis à jour mon Android Studio vers la dernière version stable (2.3) et mis à jour le Android également le plugin Gradle. Je pense que cela peut être pertinent car je n'ont pas déjà vu cette erreur.
Comme vous pouvez le constater dans la FragmentManager
documentation , getFragments()
n'est pas une méthode publique disponible pour les applications, mais un détail d'implémentation interne de la bibliothèque de support, d'où l'utilisation de la RestrictTo
annotation qui a été ajouté pour empêcher l'utilisation d'API privées.
Vous voudrez changer votre code pour ne pas utiliser getFragments
et utiliser uniquement les API publiques.
Alternative Pour ceux qui peuvent utiliser getFragments()
dans leur codage, j'ai remplacé mon code pour obtenir le dernier fragment dans backstack
par ce code (j'utilise ce code dans onBackPressed()
pour applique les modifications en fonction de currentFragment
en supposant que tous les fragments sont ajoutés à l’arrière-pile):
FragmentManager.BackStackEntry backStackEntryAt = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1);
currentFragment = backStackEntryAt.getName();
Vous pouvez utiliser (assurez-vous d'utiliser 25.2. ou supérieur
supportFragmentManager.registerFragmentLifecycleCallbacks(object : FragmentManager.FragmentLifecycleCallbacks() {
override fun onFragmentAttached(fm: FragmentManager?, f: Fragment?, context: Context?) {
f?.let { fList.add(it) }
}
override fun onFragmentDetached(fm: FragmentManager?, f: Fragment?) {
f?.let { fList.remove(it) }
}
}, false)
Au lieu d'utiliser getFragments()