Since the Android getFragmentManager() API is deprecated, is there any alternative?

前端 未结 12 1509
梦毁少年i
梦毁少年i 2020-12-05 06:47

FragmentManager is deprecated. Is there an alternative or what can I do now?

 PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocomplet         


        
相关标签:
12条回答
  • 2020-12-05 07:20

    If you're displaying a DialogFragment over a PreferenceFragment (specifically an android.preference.PreferenceFragment not the class from the Support Preference library), then you will see this warning.

    Approximately June 2018, Google deprecated the PreferenceFragment and all its associated methods like getFragmentManager(). You probably already know that getSupportFragmentManager() cannot be used on the PreferenceFragment anyway, as it's a special exception.

    The recommended approach now is to use the PreferenceFragmentCompat from the AndroidX Jetpack library or from the Preference Support library:

    implementation "androidx.preference:preference:1.0.0"
    

    You can see available versions here: https://maven.google.com -> Search for "preference"

    More info here: Android- deprecated method warning regarding PreferenceActivity


    Be aware that migrating to PreferenceFragmentCompat may be a lengthy and difficult task, especially if you have custom Preference classes. More info:

    • How do I create custom preferences using android.support.v7.preference library?
    • https://github.com/jaredrummler/ColorPicker/issues/26#issuecomment-331626888
    • https://issuetracker.google.com/issues/119256512
    • https://issuetracker.google.com/issues/124153118
    • Android: How to remove margin/padding in Preference Screen
    0 讨论(0)
  • 2020-12-05 07:22

    Extend AppCompatActivity which by default extends FragmentActivity, then you can use getSupportFragmentManager() which will return you the fragmentManager.

    0 讨论(0)
  • 2020-12-05 07:24

    If I understood you well getFragmentManager() is now deprecated

    we will use getChildFragmentManager() Return a private FragmentManager for placing and managing Fragments inside of this Fragment.

    we will use getParentFragmentManager() Return the FragmentManager for interacting with fragments associated with this fragment's activity.

    so, if you deal with fragments inside a fragment you will use the first one and if you deal with fragments inside an activity you will use the second one.

    you can find them here package androidx.fragment.app;

    0 讨论(0)
  • 2020-12-05 07:24

    Use Support Library overcome this issue.

    As per documentation Fragment class has been deprecated:

    This class was deprecated in API level 28. Use the Support Library Fragment for consistent behavior across all devices and access to Lifecycle.

    0 讨论(0)
  • 2020-12-05 07:24

    for Kotlin:

    activity
        ?.supportFragmentManager
        ?. <whatever needs to come after that>
    
    0 讨论(0)
  • 2020-12-05 07:29

    Since the question is a little broad, here's the solution for those who have migrated to androidX.

    Make sure that your fragments are using androidX versions in import section. i.e if you're using DialogFragment(), replace

    import android.app.DialogFragment
    

    with

    import androidx.fragment.app.DialogFragment
    

    Then for fragmentManager when show()ing the dialog, if launching from another fragment don't change it, but if passing from an Activity, first extend the activity from FragmentActivity(), then pass supportFragmentManager:

    // kotlin
    import androidx.fragment.app.FragmentActivity
    
    class MyActivity: FragmentActivity() {
        ...
        val myDialog = MyDialog()
        myDialog.show(supportFragmentManager, TAG)
        ...
    }
    

    Althogh the same steps also apply to support.v4 if you've not migrated to androidX. Just in the first step replace

    import android.app.DialogFragment
    

    with

    import android.support.v4.app.Fragment
    
    0 讨论(0)
提交回复
热议问题