getSupportFragmentManager()。getFragments()显示编译时错误
调用getSupportFragmentManager().getFragments()
显示下面的消息编译时间错误:
getSupportFragmentManager()。getFragments()只能从同一个库组中调用(groupId = com.android.support)
我在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
扩展了AppCompatActivity
。
我的项目模块级build.gradle
文件如下:
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' }
这是FragmentManager.java
getFragments
方法的源代码。
/** * 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();
我最近更新了我的Android Studio到最新的稳定版本(2.3),并更新了Android Gradle插件。 我认为这可能是相关的,因为我以前没有看到这个错误。
在FragmentManager
文档中 , getFragments()
不是可用于应用程序的公共方法,而是支持库的内部实现细节,因此使用添加的RestrictTo
注释来防止使用私有API。
你会想改变你的代码不使用getFragments
,只使用公共API。
替代对于那些可能在他们的代码中使用getFragments()
,我已经取代了我的代码,以获得最后一个片段在这个代码(我使用onBackPressed()
这个代码应用更改根据currentFragment
假设所有片段被添加到堆栈中):
FragmentManager.BackStackEntry backStackEntryAt = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1); currentFragment = backStackEntryAt.getName();
你可以使用(确保使用25.2.0或更高版本)
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)
而不是使用getFragments()