私はフラグメントを持っています:
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){...}
が機能していないことです。何も設定しません。name がnull
から値を取得しているかのようにif(savedInstanceSaved != null){...}
。しかし、Toasts
コードのさまざまなブロック内で使用した は、期待どおりに機能しています。に保存してonSaveInstanceState(Bundle savedInstanceState){...}
実行しています。これは、 myが null ではなく、stringの正しい値を示していることif(savedInstanceSaved != null){...}
を意味します。これは、変更中にコードが正しく機能していることを意味します。しかし、メソッドにテキストを設定していません。savedInstanceState
name
if(instanceSaved){...}
orientation
setText(String)
も使用してみsetText("String")
ましたが、うまくいきます。コードに示すように。私は何が間違っていて、何が欠けていますか? 助けてください。ありがとうございました。
注:
EditText
内部で sを使用していますandroid.support.design.widget.TextInputLayout
編集:何があっても、
setText(name)
常に の初期値を取っていることがわかりましたString name
。name
ではToast
新しく更新された値が表示されますが、どういうsetText()
わけか常に初期値を使用しています。また、向きを 3 回変更すると、アプリがクラッシュすることに気付きました。