studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android android-edittext

android - programacion - EditText Settext no funciona con Fragmento



manual de programacion android pdf (5)

Tengo fragmentos para 3 estados de una pantalla; Añadir, editar y ver. En Agregar creo una entidad y la guardo. La próxima vez que lo abra en modo Vista y establezca el nombre de la entidad usando

EditText entityName = (EditText) view.findViewById(R.id.entityName); entityName.setText(entity.getEntityname());

Hago clic en el botón Editar del modo de visualización para abrir el modo de edición. Cambio el nombre de la entidad aquí y lo guardo. Esto me lleva de nuevo a la pantalla de visualización. Pero me parece que el nombre de la entidad no está actualizado. entity.getEntityname() y encontré que entity.getEntityname() tiene el valor correcto. No estoy seguro de por qué el texto de edición no toma un nuevo valor.

¿Algunas ideas?

Nota: estoy usando la versión de Android 2.2


Como se mencionó anteriormente, el EditText parece tener un problema al restablecer el texto en onCreateView.

Esto se debe a que una vez que se crea un fragmento, hasta el momento en que lo eliminamos del backstack, se llamará a su método onResume ya que la vista no se vuelve a crear.

Entonces, la solución aquí es restablecer el texto en onResume. Esto funcionará en todo momento, incluso si bloqueas y desbloqueas la pantalla mientras el fragmento está abierto o si regresas de otro fragmento.

Sin embargo, si está configurando estos datos de un paquete, es mejor que ahorre ese valor en una variable de instancia porque el paquete puede llegar a ser nulo y puede obtener problemas de puntero nulo.


De acuerdo con @TusharVengrulekar, así es como debes implementar tu Fragmento

public class ActionBar extends Fragment { private TextView lbl_title; private String title; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_action_bar, container, false); title = "Contacts"; lbl_title = (TextView) view.findViewById(R.id.lbl_title); return view; } @Override public void onStart(){ super.onStart(); lbl_title.setText(title); } @Override public void onResume(){ super.onResume(); } }


El EditText parece tener un problema al restablecer el texto en onCreateView . Entonces, la solución aquí es restablecer el texto en onResume . Esto funciona.

También hay un problema en onActivityCreated. Restablecí el contenido de edittext en onStart y funciona. [créditos a @savepopulation]


Hay algunas clases de Vista en Android que deberían guardar su estado cuando se desmonta su contenedor. Fragment.onViewCreated () debe llamarse antes de View.onSaveInstanceState (). Entonces, si establece un valor en el método Fragment.onViewCreated (). El valor debe borrarse en el método View.onRestoreInstanceState (estado parcelable).

Por ejemplo, clase TextView, RecyclerView, etc. Puede leer el código de TextView.java:

public Parcelable onSaveInstanceState() { Parcelable superState = super.onSaveInstanceState(); // Save state if we are forced to final boolean freezesText = getFreezesText(); boolean hasSelection = false; int start = -1; int end = -1; .... if (freezesText || hasSelection) { SavedState ss = new SavedState(superState); .... } .... }

Hay parámetros para controlar si se debe guardar el estado: "freezesText" y "hasSelection". No se puede seleccionar TextView, por lo que hasSelection is false. La función, getFreezesText (), también devuelve false en la clase TextView. Por lo tanto, TextView no guardaría el estado. El código de EditText.java:

@Override public boolean getFreezesText() { return true; }

EditText devuelve true, por lo que EditText debería guardar el estado.

Hay algún método para solucionar este error:

1.Implementar EditText.getFreezesText () y devolver falso, y borrar el estado de selección en EditText

2.Implementar enSaveInstanceState of EditText, devuelva null.me gusta esto:

public Parcelable onSaveInstanceState() { super.onSaveInstanceState(); return null; }

3. use EditText.setSaveEnable (falso);

4.add param en xml "saveEnable = ''false''"


También hay un problema en onActivityCreated. Restablecí el contenido de edittext en onStart y funciona.