PreferenceActivity:getFragmentManager()已被弃用 [英] PreferenceActivity: getFragmentManager() has been deprecated
问题描述
在测试 android.preference.PreferenceActivity 时,我得到以下信息警告:
When testing a android.preference.PreferenceActivity, I get the following warning:
警告:不推荐使用Activity中的[不推荐使用] getFragmentManager()
warning: [deprecation] getFragmentManager() in Activity has been deprecated
这就是我获取当前PreferenceFragment
的句柄的方法:
That is how I obtain a handle to the current PreferenceFragment
:
FragmentManager fm = this.mActivity.getFragmentManager();
this.currentFragment = (PreferenceFragment) fm.getFragments().get(1);
使用FragmentActivity.getSupportFragmentManager()
显然不是一种选择.
Using FragmentActivity.getSupportFragmentManager()
is obviously not an option.
我发现 PreferenceFragmentCompat ,它将替换不推荐使用的PreferenceFragment
.
I've found PreferenceFragmentCompat, which would replace the deprecated PreferenceFragment
.
但是PreferenceActivity
是否有任何androidx
替代品?
But is there any androidx
replacement for the PreferenceActivity
?
推荐答案
我想出的是一个AppCompatActivity
,它使androidx
What I've came up with is an AppCompatActivity
, which inflates androidx
PreferenceFragment. I've kept the previous EXTRA_SHOW_FRAGMENT
, so that switching to a specific PreferenceFragment
still would work. EXTRA_NO_HEADERS
has not yet been considered:
/**
* 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 ,默认情况下支持此功能.
Update: Meanwhile there's PreferenceFragmentCompat, which support this by default.
这篇关于PreferenceActivity:getFragmentManager()已被弃用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!