【问题标题】:using getFragmentSupport Manager inside PreferenceFragment在 PreferenceFragment 中使用 getFragmentSupport Manager
【发布时间】:2019-05-30 11:16:56
【问题描述】:

我在我的 PreferenceFragment 扩展类中找到了我想使用的这个库,我的问题是 getSupportFragmentManager 无法解决。 我的问题是如何在片段扩展 PreferenceFragment 时显示片段

我尝试更改为 getFragmentManager 但不起作用

public class PreferencesFragment extends PreferenceFragment {

 final Preference currencyPreference = findPreference(getResources().getString(R.string.setting_category_currency_key));
        currencyPreference.setOnPreferenceClickListener(preference -> {
            //selectCurrencyDialog = new SelectCurrencyFragment();
            //selectCurrencyDialog.show(((SettingsActivity) getActivity()).getSupportFragmentManager(), "SelectCurrency");

            CurrencyPicker picker = CurrencyPicker.newInstance("Select Currency");  // dialog title
            picker.setListener((name, code, symbol, flagDrawableResID) -> {
                // Implement your code here
            });
            picker.show(getSupportFragmentManager(), "CURRENCY_PICKER");

            return false;
        });

}

错误在这一行

getSupportFragmentManager()

picker.show(getSupportFragmentManager(), "CURRENCY_PICKER");

【问题讨论】:

    标签: java android preferences


    【解决方案1】:

    使用 getChildFragmentManager() 代替 getSupportFragmentManager()

    【讨论】:

    • 它不会工作 错误错误:没有找到合适的方法为 show(android.app.FragmentManager,String)
    • @AnnaMurray 片段和片段管理器包不匹配。你能把两个包都导入相同的吗?
    • 我正在使用 PreferenceFragment
    • PreferenceFragment 基础片段的包名是什么?
    • 它基于 PreferenceFragment
    【解决方案2】:

    您是否尝试将getSupportFragmentManager() 替换为PreferencesFragment.this.getActivity().getSupportFragmentManager()

    这通过返回您的PreferencesFragment 的父活动并获取它的片段管理器来工作。如果您的父活动扩展了支持库中的活动,则您可能希望使用 PreferencesFragment.this.getActivity().getFragmentManager()

    【讨论】:

      【解决方案3】:

      片段中使用-

      picker.show(getChildFragmentManager(), "CURRENCY_PICKER");
      

      Activity中使用-

      picker.show(getSupportFragmentManager(), "CURRENCY_PICKER");
      

      【讨论】:

      • 使用 PreferenceFragmentCompat 代替 PreferenceFragment 就可以了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多