首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PreferenceActivity: getFragmentManager()已被废弃

PreferenceActivity: getFragmentManager()已被废弃
EN

Stack Overflow用户
提问于 2018-10-31 07:45:10
回答 2查看 3.9K关注 0票数 5

在测试android.preference.PreferenceActivity时,我会收到以下警告:

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

这就是我如何获得当前PreferenceFragment句柄的方式。

代码语言:javascript
运行
复制
FragmentManager fm = this.mActivity.getFragmentManager();
this.currentFragment = (PreferenceFragment) fm.getFragments().get(1);

显然,使用FragmentActivity.getSupportFragmentManager()不是一种选择。

我找到了PreferenceFragmentCompat,它将取代不推荐的PreferenceFragment

但是是否有androidx替代PreferenceActivity

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-31 18:05:10

我想出了一个AppCompatActivity,它能使androidx PreferenceFragment膨胀。我保留了以前的EXTRA_SHOW_FRAGMENT,所以切换到特定的PreferenceFragment仍然有效。EXTRA_NO_HEADERS尚未得到考虑:

代码语言:javascript
运行
复制
/**
 * 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;
    }

    ...
}

Update:同时还有PreferenceFragmentCompat,它默认支持这一点。

票数 1
EN

Stack Overflow用户

发布于 2018-10-31 08:07:05

作为设备固件的一部分而提供的与碎片相关的UI类在Android28中已经被废弃。建议移到ActivityFragment的支持库类。

已经有其他关于这方面的帖子:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53078533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档