代码之家  ›  专栏  ›  技术社区  ›  Martin Zeitler

PreferenceActivity:getFragmentManager()已被弃用

  •  1
  • Martin Zeitler  · 技术社区  · 6 年前

    android.preference.PreferenceActivity ,我得到以下警告:

    警告:[已弃用]活动中的getFragmentManager()已弃用

    我就是这样得到电流的句柄的 PreferenceFragment :

    FragmentManager fm = this.mActivity.getFragmentManager();
    this.currentFragment = (PreferenceFragment) fm.getFragments().get(1);
    

    FragmentActivity.getSupportFragmentManager() 显然不是一个选择。

    PreferenceFragmentCompat ,它将替换已弃用的 首选片段 .

    但是有没有 androidx 更换 PreferenceActivity ?

    2 回复  |  直到 5 年前
        1
  •  3
  •   Maik    6 年前

    作为设备固件一部分提供的与片段相关的UI类在Android 28中已被弃用。建议移到支持库类中 Activity s和 Fragment S

        2
  •  1
  •   Martin Zeitler    5 年前

    AppCompatActivity ,会膨胀 androidx PreferenceFragment EXTRA_SHOW_FRAGMENT ,以便切换到特定的 PreferenceFragment 还是有用的。 EXTRA_NO_HEADERS 尚未考虑:

    /**
     * Preference {@link AppCompatActivity}.
     * @see <a href="https://developer.android.com/reference/androidx/preference/Preference Fragment">PreferenceFragment</a>
    **/
    public final class PreferenceCompatActivity extends AppCompatActivity {
    
        /** the class-name of the main {@link androidx.preference.PreferenceFragment} */
        public static final String MAIN_FRAGMENT = "com.acme.fragment.PreferencesFragment";
    
        /** framework {@link Intent} extra */
        public static final String EXTRA_SHOW_FRAGMENT = ":android:show_fragment";
    
        /** framework {@link Intent} extra */
        public static final String EXTRA_NO_HEADERS = ":android:no_headers";
    
        /** the currently displayed {@link PreferenceFragment} */
        private PreferenceFragment currentFragment;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            String fragmentName = MAIN_FRAGMENT;
            Intent intent = getIntent();
            if (intent.getStringExtra(EXTRA_SHOW_FRAGMENT) != null) {
                fragmentName = intent.getStringExtra(EXTRA_SHOW_FRAGMENT);
            }
            this.switchToFragment(fragmentName, null);
        }
    
        private void switchToFragment(String fragmentName, @Nullable Bundle args) {
            PreferenceFragment fragment;
            switch(fragmentName) {
                // case "": {break;}
                default: {
                    fragment = new PreferencesFragment();
                }
            }
            getFragmentManager().beginTransaction().replace(android.R.id.content, fragment).commit();
            this.currentFragment = fragment;
        }
    
        @VisibleForTesting(otherwise = VisibleForTesting.NONE)
        public PreferenceFragment getCurrentFragment() {
            return this.currentFragment;
        }
    
        ...
    }
    

    更新 :同时还有 PreferenceFragmentCompat ,默认情况下支持此操作。

    推荐文章