【问题标题】:How to save data in Fragment after start another fragment?启动另一个片段后如何将数据保存在片段中?
【发布时间】:2013-12-27 09:32:00
【问题描述】:

我有三个片段 A,B,C 在片段A-a中,从服务器获取一些变量ID,然后我创建捆绑包,将ID放入其中并启动片段B,在此片段中,我从捆绑包中获取ID并通过该ID显示所有信息,但是当我启动片段C时然后我按下按钮返回并返回 ti 片段 B,变量 id 为空。我该如何解决?我想我可以将 id 保存在数据库中,但也许有更简单的方法? 我知道当我按下片段 C 时,片段 B 想要从包中获取信息,这就是我制作下一个的原因:

Bundle bundle = getArguments();
if (fakeID == null) {
    fakeID = bundle.getString("fakeID");
}

已编辑:

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState); 
    if (savedInstanceState == null)
    {
        Bundle bundle = getArguments();
        fakeID = bundle.getString("fakeID");
    }
    else{
        fakeID = savedInstanceState.getString("fakeID");
    }
 }
 @Override
public void onSaveInstanceState(Bundle outState) {
    // TODO Auto-generated method stub
    super.onSaveInstanceState(outState);
    outState.putString("fakeID", fakeID);
}

但是当我回到这个片段时 savedInstanceState == null 在这个语句中

if (savedInstanceState == null)

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    根据this onSaveInstanceState 不会被调用,除非活动本身已经调用它。这意味着如果您在同一活动中更改片段。 onSavedInstanceChanged 不会被调用。因此它是空的。正如链接建议的那样,您必须使用SharedPreferencesDatabase

    【讨论】:

    • 也许如果 (savedInstanceState == null) ID=bundle.getInt("ID) 而不是 ID = 0;?
    • 你确定!这是对 null 条件的更好建议
    • 我现在试试,我会告诉你结果
    • 你确定ID是从bundle而不是从savedInstance中获得的吗?!尝试添加Log.d("",""); 以检查值的来源
    • 请删除您对 SavedInstance 的想法,我会检查您的答案
    猜你喜欢
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多