【问题标题】:Preference Fragment with popBackStack transaction带有 popBackStack 事务的偏好片段
【发布时间】:2020-04-16 13:49:30
【问题描述】:

在深入研究 stackoverflow 以找到类似情况但没有运气后,我决定发布我的问题。对于我的 android 应用程序,我有一个设置 (MySettings.java) PreferenceFragmentCompat,它依次打开按钮单击弹出一个列表 (MyList.java) ListFragment 并在项目选择后保存它并关闭列表片段。片段切换实现如下:

MySettings.java

@Override
public void onResume() {
    super.onResume();
    loadData();
}

private void loadData() {
    // data load from SharedPreferences 
}

...

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(android.R.id.content, MyList.class).addToBackStack().commit();

MyList.java

public void onListItemClick(ListView listView, View view, int position, long id) {
    // data save into SharedPreferences

    ...

    getFragmentManager().popBackStack();
}

所以,在列表片段关闭并返回设置片段后,我想显示(加载)以前保存的项目,即我添加了onResume()(建议在hier)方法依次触发加载数据功能。但是.popBackStack()之后没有触发加载过程

我做错了什么? 通常可以通过使用片段来实现设置概念吗?还是有更好的方法?如果是这样,请分享您的经验。

任何帮助将不胜感激!

【问题讨论】:

    标签: android android-fragments android-settings


    【解决方案1】:

    onResume 指的是Activity 并且仅在Activity 恢复时调用。当您使用ft.replace 时,会在调用popBackStack() 时重新创建首选项片段。

    因此,您可以将loadData() 放在您的偏好片段的onCreateView() 方法中。

    【讨论】:

    • 方法 onResume() 也退出 Fragments 并且它是 called when the fragment is visible to the user and actively running. This is generally tied to Activity#onResume() of the containing Activity's lifecycle
    • 不,即在我添加 onCreateView 方法之后,该方法又调用 popBackStack() 上的 loadData() 函数调用它(MySettings 片段)不调用 loadData()。
    • 但是当你运行popBackStack()时它不会再次调用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 2014-07-29
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多