valida studio seleccione ruta recursos proyecto por muestra favor especificada error diseño abrir java android compiler-errors

java - studio - getSupportFragmentManager(). getFragments() muestra un error de tiempo de compilación



error sdk android studio (3)

Alternativa Para aquellos que pueden estar usando getFragments() en su codificación, he reemplazado mi código para obtener el último fragmento en backstack de este código (estoy usando este código en onBackPressed() para aplicar cambios de acuerdo con currentFragment asumiendo que todos los fragmentos se agregan a pila posterior):

FragmentManager.BackStackEntry backStackEntryAt = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1); currentFragment = backStackEntryAt.getName();

Llamar a getSupportFragmentManager().getFragments() muestra un error de tiempo de compilación con el siguiente mensaje:

getSupportFragmentManager (). getFragments () solo se puede llamar desde dentro del mismo grupo de biblioteca (groupId = com.android.support)

MainActivity las siguientes clases en 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 extiende AppCompatActivity .

El archivo build.gradle mi módulo de proyecto es el siguiente:

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'' }

Este es el código fuente del método getFragments dentro de 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();

Recientemente he actualizado mi Android Studio a la última versión estable (2.3) y también actualicé el complemento Android Gradle. Creo que esto puede ser relevante porque no he visto este error anteriormente.


Como se nota en la documentación de FragmentManager , getFragments() no es un método público disponible para las aplicaciones, sino un detalle de implementación interna de la Biblioteca de soporte, de ahí el uso de la anotación RestrictTo que se agregó para evitar el uso de API privadas.

Deseará cambiar su código para no usar getFragments y solo usar las API públicas.


Puede usar (asegúrese de usar 25.2.0 o superior)

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)

En lugar de usar getFragments()