android - 片段内的嵌套首选项(从底部导航) - 后堆栈不起作用
问题描述
一切正常,除了我无法返回设置片段。单击后退按钮时,为什么不调用片段?
结构:
MainActivity -> SettingsFragment (inside NavController) -> Preferences Overview -> First Preference Category
SettingsFragment.java
public class SettingsFragment extends Fragment implements
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback{
private SettingsViewModel settingsViewModel;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
settingsViewModel = ViewModelProviders.of(this).get(SettingsViewModel.class);
final View root = inflater.inflate(R.layout.settings_activity, container, false);
getActivity().getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings, new SetupSettingsFragment(), "SetupSettingsFragment")
.addToBackStack(null)
.commit();
return root;
}
public static class SetupSettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences_overview, rootKey);
}
}
@Override
public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) {
final Bundle args = pref.getExtras();
final Fragment fragment = getActivity().getSupportFragmentManager().getFragmentFactory().instantiate(
getActivity().getClassLoader(),
pref.getFragment());
fragment.setArguments(args);
fragment.setTargetFragment(caller, 0);
int setupSettingsFragment = getFragmentManager().findFragmentByTag("SetupSettingsFragment").getId();
getActivity().getSupportFragmentManager().beginTransaction()
.replace(setupSettingsFragment, fragment)
.addToBackStack(null)
.commit();
return true;
}
FirstPreferenceCategory.java
public class FirstPreferenceCategory extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.PreferenceOverview, rootKey);
}}
}
PreferenceOverview.xml
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:key="preferenceScreenOverview"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Preference
app:title="FirstPreferenceCategory"
app:fragment="com.ui.FirstPreferenceCategory"/>
编辑:
我还把 onPreferenceStartManager 和 SetupSettingsFragment 移到了 MainActivity,但是后面的堆栈仍然有问题。
解决方案
推荐阅读
- regex - 如何包围以 ! 开头的文本 直到 sed 中的转义字符结束?
- google-assistant-sdk - 谷歌助理自动播放的可能性
- perl - if(!$_) 的含义
- python - 使用预定义列表展开行,同时保留现有行的值
- mysql - 错误代码:1054:当表存在时,'字段列表'中的未知列'table_name.column_name'
- django - 在 Django Crispy 表单中包含搜索框
- python - 更改函数 arg 中的全局变量
- c++ - 如何在 LLVM 中创建加载指令,给定执行加载的指针?
- config - 通过键盘输入动态设置 Qtile 边距
- java - 是什么让 Thread.activeCount() 打印“错误”数字?