[英]Android — OnCreateView called twice - each time the orientation changes and loses the field values
我知道這是一個話題,但是最近沒有。 我遵循了建議不要重復創建的所有方法,但是仍然可以重復,因此我丟失了信息。 有關如何解決的任何想法? 先謝謝您的幫助!
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
mRootView = inflater.inflate(R.layout.fragment_base_info, container, false);
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
mShantiName = (EditText) mRootView.findViewById(R.id.baseInfoShantiName);
mEmail = (EditText) mRootView.findViewById(R.id.baseInfoEmail);
mPassword = (EditText) mRootView.findViewById(R.id.baseInfoPassword);
mFirstName = (EditText) mRootView.findViewById(R.id.baseInfoFirstName);
mLastName = (EditText) mRootView.findViewById(R.id.baseInfoLastName);
mPhone = (EditText) mRootView.findViewById(R.id.baseInfoPhone);
mPhonePerfixMS = (MultiSpinner) mRootView.findViewById(R.id.baseInfoPhonePrefix);
mShantiName.setText("fh");
mEmail.setText("d@f.com");
mPassword.setText("33ddSS..");
mFirstName.setText("gh");
mLastName.setText("rf");
mPhone.setText("5551212");
a++;
DeviceDisplayLanguage = Locale.getDefault().getDisplayLanguage();
if (DeviceDisplayLanguage.equals(getActivity().getString(R.string.DeviceDisplayGerman)))
mPassword.setGravity(Gravity.CENTER_VERTICAL|View.TEXT_ALIGNMENT_VIEW_START);
if (Common.user != null && ((Common.user.getNvGoogleUserId() != null && !Common.user.getNvGoogleUserId().equals("")) || (Common.user.getNvFacebookUserId() != null && !Common.user.getNvFacebookUserId().equals("")))) {
isLoginWith = true;
mPassword.setVisibility(View.GONE);
init();
} else {
isLoginWith = false;
mPassword.setVisibility(View.VISIBLE);
}
if (savedInstanceState != null) {
i++;
mShantiName.setText(savedInstanceState.get("Name").toString());
mEmail.setText(savedInstanceState.get("Email").toString());
mPassword.setText(savedInstanceState.get("Password").toString());
mFirstName.setText(savedInstanceState.get("FirstName").toString());
mLastName.setText(savedInstanceState.get("LastName").toString());
mPhone.setText(savedInstanceState.get("Phone").toString());
}
Toast.makeText(getActivity(), "i=" + i + "j=" + j + "a=" + a,
Toast.LENGTH_SHORT).show();
TelephonyManager tMgr = (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
mPhonePerfix = (CountryToPhonePrefix.prefixFor(tMgr.getNetworkCountryIso().toUpperCase()));
initializer = new CustomViewsInitializer(getActivity());
if (((MultiSpinner) mRootView.findViewById(R.id.baseInfoPhonePrefix)).getChooseValues().size() > 0)
selected = ((MultiSpinner) mRootView.findViewById(R.id.baseInfoPhonePrefix)).getChooseValues().get(0);
initializer.setSpinner(mPhonePerfixMS, CodeValue.countries, getString(R.string.signUpPhonePrefix), selected);
// InitValidation();
mRootView.findViewById(R.id.baseInfoCreateUserBtn).setOnClickListener(this);
mShantiName.requestFocus();
return mRootView;
}
在方向更改中,您需要將數據保存在onSaveInstanceState方法中,我想您錯過了該方法,這就是丟失字段值的原因。
//Here you Save your data
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("Name", mShantiName.getText().toString());
outState.putString("Email", mEmail.getText().toString());
outState.putString("Password", mPassword.getText().toString());
outState.putString("FirstName", mFirstName.getText().toString());
outState.putString("LastName", mLastName.getText().toString());
outState.putString("Phone", mPhone.getText().toString());
}
范例:
public class Fragment_1 extends Fragment {
private EditText title;
private Button go_next;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true); //Will ignore onDestroy Method (Nested Fragments no need this if parent have it)
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
onRestoreInstanceStae(savedInstanceState);
return super.onCreateView(inflater, container, savedInstanceState);
}
//Here you can restore saved data in onSaveInstanceState Bundle
private void onRestoreInstanceStae(Bundle savedInstanceState){
if(savedInstanceState!=null){
String SomeText = savedInstanceState.getString("title");
}
}
//Here you Save your data
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("title", "Some Text");
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mSpinnerstate != null)
outState.putInt("category", mSpinnerstate.getSelection());
// do this for each or your Spinner
// You might consider using Bundle.putStringArray() instead
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (savedInstanceState != null)
mSpinnerstate.setSelection(savedInstanceState.getInt("category", 0));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.