У меня есть фрагмент:фрагмент - EditText.setText (String) не работает, когда строка приходит из 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){...}
не работает. Он ничего не устанавливает. Как будто, имя получает null
значение от if(savedInstanceSaved != null){...}
. Но Toasts
, который я использовал внутри своих различных блоков кода, работает так, как ожидалось. Он сохраняет в onSaveInstanceState(Bundle savedInstanceState){...}
, выполняя if(savedInstanceSaved != null){...}
, что означает, что мой savedInstanceState
не является нулевым, а также показывает правильное значение для name
строки в if(instanceSaved){...}
. Это означает, что мой код работает правильно во время изменения orientation
. Но он не устанавливает какой-либо текст в методе setText(String)
.
Я также пробовал использовать setText("String")
, и это работает. Как показано в коде. Что я делаю неправильно и чего не хватает? Пожалуйста помоги. Спасибо.
Примечание: Я использую
EditText
S внутриandroid.support.design.widget.TextInputLayout
EDIT: я обнаружил, что независимо от того, что,
setText(name)
всегда принимает начальное значениеString name
. Несмотря на то, чтоname
вToast
показывает новое обновленное значение,setText()
как-то всегда использует начальное значение. Кроме того, я заметил, что если я изменил ориентацию трижды, приложение выйдет из строя.
.setText (name.toString()) попробуйте этот способ. –
Это означает, что значение равно – Eenvincible
@MFaisalHyder, что тоже не работает. И я даже не понимаю, почему мое приложение рушится каждый третий раз, когда я пытаюсь повернуть экран. –