0

amis.Android: Mettre à jour ListView à partir de EditText

J'ai un module d'application qui implémente le modèle d'état. L'idée est: 1. utilisateur d'entrer la date -> 2. L'écran change à un état ne: ListView et dynamique gonfle demande à l'utilisateur de remplir la liste avec des données

problème est que quand je l'appelle notifyDataSetChange() de méthode de mise à jour 2ème fois, la vue EditText ne veut plus faire ses fonctions.

Ceci est une chaîne d'un logcat, qui je pense contient la clé de mon problème.

09-10 10: 33: 38,937 26954-26954/com.example.android.turtleinfo D/ListView: changer la position de mise au point d'accessibilité = 0

Voici pour tout les codes.

1. Mon Motif Etat classe Super

public abstract class ScreenState 
    { 

     public BuilderActivity activity; 



     public ScreenState(BuilderActivity activity) { 
      this.activity = activity; 
      //initializeScreen(activity); 
     } 

     public abstract void initializeScreen(Activity activity); 
     public abstract void switchState(); 
     public abstract void updateText(View view); 


     public void addTextWatcher(EditText text) { 
      text.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
       @Override 
       public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
        if (actionId == EditorInfo.IME_ACTION_DONE) { 

         activity.state.updateText(v); 

         return true; 
        } 
        return false; 
       } 
      }); 
     } 


    } 

2. Mise en oeuvre de l'écran d'initialisation et les méthodes updateData

@Override 
    public void initializeScreen(Activity activity) { 

     ((BuilderActivity) activity).editText.setHint("Name"); 
     addTextWatcher(((BuilderActivity) activity).editText); 
     textView = (TextView)activity.getLayoutInflater().inflate(R.layout.schedule_text_style, null); 
     textView.setHeight(100); 
     screenText = "End Date: " + new SimpleDateFormat("MMMM dd, yyyy", Locale.ENGLISH).format(((BuilderActivity) activity).data.getEndDate())+"\n\n"; 

     textView.setText(screenText+"\n"); 
     ((BuilderActivity) activity).scheduleLayout.addView(textView); 

     ((BuilderActivity) activity).data.setNames(new ArrayList<String>()); 

     lv = (ListView)activity.getLayoutInflater().inflate(R.layout.listview_text_style, null); 
     listItems = new ArrayList<>(); 

     adapt = new ArrayAdapter<>(super.activity, R.layout.schedule_text_style, listItems); 
     lv.setAdapter(adapt); 
     ((BuilderActivity) activity).scheduleLayout.addView(lv); 


    } 

@Override 
public void updateText(View view) { 

    String text = activity.editText.getText().toString(); 

    if (text.length() >= 2) { 
     if (!activity.data.names.contains(text)) { 
      activity.data.addToList(text); 



      listItems.add(text); 
      adapt.notifyDataSetChanged(); 

      activity.editText.setText(""); 
      counter++; 
      activity.editText.setText(""); 

     } else { 
      Toast.makeText(activity, "same names are not allowed", 
       Toast.LENGTH_LONG).show(); 
      ((BuilderActivity) activity).editText.setText(""); 
     } 
    } 
    else 
    { 
     Toast.makeText(activity, "name should contain 2 or more symbols", 
       Toast.LENGTH_LONG).show(); 
     ((BuilderActivity) activity).editText.setText(""); 
    } 

} 

Voici comment il regarde dispositif.

1. Première introduction est ok

enter image description here

2. Et deuxième et insertionas autres sont impossibles. OK bouton SoftKeyboard passe premier à bouton NEXT enter image description here

3. Si je clique sur suivant, EditText desserre mise au point, rien ne se passe, mais le bouton SUIVANT Passe à bouton '/ n'.

enter image description here

Alors, s'il vous plaît, si quelqu'un sait, ce que je fais worng, aider!

Merci d'avance!

Répondre

1

Votre problème est dans

public void addTextWatcher(EditText text) 
fonction

.

Regardez le android: imeActionId et android: attributs imeOptions, plus la méthode setOnEditorActionListener(), le tout sur TextView/EditText.

Vous pouvez également modifier le texte du bouton du clavier en l'utilisant.

mEditText.setImeActionLabel("Your text", KeyEvent.KEYCODE_ENTER);