炒菜我有一個片段不工作:片段EditText.setText(字符串)字符串時,來自savedInstanceState但是當硬編碼
ContactUsFragment.java
import android.app.Activity;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.app.Fragment;
import android.support.design.widget.TextInputLayout;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Toast;
/**
*
*/
public class ContactUsFragment extends Fragment {
private EditText et_name, et_phoneno;
private String name = "", phone = "";
private boolean instanceSaved = false;
public ContactUsFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState != null) {
Toast.makeText(getActivity().getBaseContext(), "Not null", Toast.LENGTH_LONG).show();
name = savedInstanceState.getString("sv_name");
phone = savedInstanceState.getString("sv_phone");
instanceSaved = savedInstanceState.getBoolean("InstanceSaved");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_contact_us, container, false);
registerETs(view);
if(instanceSaved) {
Toast.makeText(getActivity().getBaseContext(), "Instance was saved", Toast.LENGTH_LONG).show();
Toast.makeText(getActivity().getBaseContext(), name, Toast.LENGTH_LONG).show(); //--This line works. Gives the correct value of string upon orientation change--
Toast.makeText(getActivity().getBaseContext(), phone, Toast.LENGTH_LONG).show();
et_name.setText(name); //--This line does not work--
et_name.setText("Another String"); //--This line does not work--
et_phoneno.setText(phone); //--This line does not work--
}
et_name.setText("A String"); //--This line works--
return view;
}
@Override
public void onStart() {
super.onStart();
}
public void registerETs(View view) {
et_name = (EditText)view.findViewById(R.id.input_name);
et_phoneno = (EditText)view.findViewById(R.id.input_phoneno);
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
Toast.makeText(getActivity().getBaseContext(), "saving", Toast.LENGTH_LONG).show();
savedInstanceState.putString("sv_name", et_name.getText().toString());
savedInstanceState.putString("sv_phone", et_phoneno.getText().toString());
savedInstanceState.putBoolean("InstanceSaved", true);
}
}
我現在面臨的問題是,在et_name.setText(name)
裏面的if(instanceSaved){...}
不工作。它沒有設置。就好像,名字從if(savedInstanceSaved != null){...}
獲得null
的值。但我在各種代碼塊中使用的Toasts
按預期工作。它保存在onSaveInstanceState(Bundle savedInstanceState){...}
中,執行if(savedInstanceSaved != null){...}
,這意味着我的savedInstanceState
不爲空,並且還顯示if(instanceSaved){...}
中name
字符串的正確值。這意味着我的代碼在orientation
更改期間正常工作。但它不是在setText(String)
方法中設置任何文本。
我也嘗試過使用setText("String")
,這工作。如代碼所示。我在做什麼錯,我錯過了什麼?請幫忙。謝謝。
注: 我使用內部
android.support.design.widget.TextInputLayout
編輯
EditText
S: 我發現,不管是什麼,setText(name)
總是服用String name
的初始值。即使Toast
中的name
顯示新的更新值,setText()
總是使用初始值。 另外,我注意到,如果我改變方向三次,應用程序崩潰。
.setText(name.toString())試試這種方式。 –
這基本上意味着價值爲null – Eenvincible
@MaisaiHyder,這也不起作用。而我甚至不明白爲什麼我的應用每三秒鐘都會崩潰,我正在嘗試旋轉屏幕。 –