这是我的问题,当我在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。
答案 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
}