在Android Fragment中保存简单变量

时间:2013-10-11 23:51:34

标签: android android-fragments

这是我的问题,当我在android中创建一个片段时,例如让我们说:

GastosSectionFragment gastosFragment = new GastosSectionFragment();
Fragment.gastosFragment.darUserID(userKey);

我向该活动发送一个简单的整数,没问题。例如,假设我发送数字1.它将存储在该类中的属性中,因为我创建了该片段。 一切都会好起来的,我会收到这个号码。但是当我旋转手机时,变量“userKEY将丢失,它将转换为cero”当我水平旋转手机时,我无法保存该号码,如何保存该变量的数据。

这里我把我收到片段内“userKey”的代码放在

public long darUserID(long userKey) {
    // TODO Auto-generated method stub
    return user_id = userKey;
}

使用onCreate方法的属性。

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_section_gastos,
            container, false);

    idStatico = darUserID(user_id);

我无法保存那个小号码。这不是FragmentActivity,这个类只是一个 FRAGMENT 。第一次很好,旋转屏幕丢失了我以前收到的数字。片段没有OnSaveBundleInstances。

3 个答案:

答案 0 :(得分:1)

片段可以user_id方法在onSaveInstanceState方法中保存onCreateView,并在 class GastosSectionFragment extends Fragment { private static final String BUNDLE_USER_ID = "BUNDLE_USER_ID"; private long user_id; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_section_gastos, container, false); if (savedInstanceState != null) user_id = savedInstanceState.getLong(BUNDLE_USER_ID); // now is your user_id restored after orientation change, // so you can do some stuff with it return rootView; } public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putLong(BUNDLE_USER_ID, user_id); } public long setUserID(long userKey) { this.user_id = userKey; } } 方法中更改方向后恢复。检查此fragment guide,特别是在示例中显示保存片段状态。

活动代码保持不变(我只更改了方法名称),您的片段应如下所示:

{{1}}

答案 1 :(得分:1)

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}

添加方法覆盖,以及变量保存状态

答案 2 :(得分:0)

在KOSO回答之后,这就是我解决问题的方法,希望它可以帮助别人。

当我第一次创建Fragment时一切正常,发送userKey,一切都很好。

GastosSectionFragment gastosFragment = new GastosSectionFragment();
Fragment.gastosFragment.darUserID(userKey);

现在为了解决这个问题,将手机旋转时的片段,例如水平,它将调用覆盖方法 OnCreateView()。每次旋转手机时,都会调用此方法。

public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_section_gastos,
    container, false);
//This is not null when we rotate the screen, first we save the Bundle SavedInstance
//After do that we put a integer, in this case the userKey
//then we recover the user key, and everything will work fine.
if (savedInstanceState != null)
{
    this.savedInstanceState = savedInstanceState;
    savedInstanceState.putInt("userKey", (int) idStatico);
    idStatico = savedInstanceState.getInt("userKey");
}
//this will be null for the first time, only the first time this will bse used.
if (savedInstanceState == null)
{
    idStatico = darUserID(user_id);
}
//Do the rest of the work

}