EditText Settext ne fonctionne pas avec Fragment

j'ai des fragments pour 3 états d'un écran; Add, Edit et View. En Add je crée une entité et la sauve. La prochaine fois que je l'ouvre en mode vue et que je mets le nom de l'entité en utilisant

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

je clique sur le bouton edit du mode View pour ouvrir le mode Edit. - Je changer le nom de l'entité d'ici et de l'enregistrer. Cela me ramène à l'écran d'affichage. Mais je trouve que le nom de l'entité n'est pas mis à jour. Je debug et constaté que entity.getEntityname() a la valeur correcte. Je ne suis pas sûr pourquoi le texte d'édition ne prend pas nouveau valeur.

des idées?

<!-Note: j'utilise android version 2.2

19
demandé sur Tushar Vengurlekar 2012-11-09 10:52:09

5 réponses

le texte édité semble avoir un problème avec la réinitialisation du texte dans onCreateView. La solution ici est de rétablir le texte dans onResume. Les travaux de cette.

76
répondu Tushar Vengurlekar 2015-04-21 15:37:16

comme mentionné précédemment, le texte édité semble avoir un problème avec la réinitialisation du texte dans onCreateView.

c'est parce qu'une fois qu'un fragment est créé , jusqu'à ce que nous le retirions de l'arrière-plan, sa méthode onResume serait appelée car la vue n'est pas créée de nouveau.

donc la solution ici est de réinitialiser le texte dans onResume. Cela fonctionnera en tout temps, même si u verrouiller et déverrouiller l'écran ur pendant que ce fragment est ouvert ou vous revenez d'un autre fragment

Toutefois, si vous définissez ces données à partir d'un bundle, il est préférable tonsave cette valeur dans une variable d'instance cause le bundle pourrait venir null amd u peut gett pointeur null questions alors

5
répondu Himmat Gill 2015-11-22 13:51:50

il y a aussi un problème dans onActivityCreated. J'ai réinitialisé le contenu d'edittext dans onStart et ça fonctionne.

3
répondu savepopulation 2015-01-21 12:18:16

selon le @TusharVengrulekar, c'est ainsi que vous devez implorer votre Fragment

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();
}
}
3
répondu Francois Csy De Glencoe 2015-11-22 14:01:33

Il ya certaines classes de vue dans Android devrait enregistrer leur statut lorsque leur conteneur est détaché. Fragment.onViewCreated () doit être appelé avant View.onSaveInstanceState (). Donc si vous définissez une valeur dans le Fragment de méthode.onViewCreated (). La valeur doit être effacée dans la vue méthode.onRestoreInstanceState (État Morcelable).

par exemple,class TextView, RecyclerView et ainsi de suite.Vous pouvez lire le code 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);
        ....
    }
    ....
   }

Il y a de paramètres à contrôlez s'il faut sauvegarder l'état: "freezentext"et " hasSelection". TextView ne peut pas être sélectionné,donc hasSelection est false. la fonction ,getFreezesText(),renvoie false dans la classe TextView aussi. Ainsi, TextView ne sauverait pas l'état. le code de EditText.java:

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

EditText retourner true, alors EditText devrait sauvegarder l'état.

Il y a une méthode pour corriger ce bug:

1.implémenter EditText.getFreezesText () et return false,et effacer l'état de select dans EditText

2.implémenter onSaveInstanceState of EditText, return null.comme ceci:

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

3.utilisez EditText.setSaveEnable (false);

4.ajouter param xml " saveEnable='false'"

3
répondu David 2017-06-07 03:24:46