2017-04-10 2 views
1

J'ai rendu un bouton invisble en XML, je veux rendre le bouton visible à nouveau quand une certaine valeur de chaîne dans mon EditText est faite. J'ai utilisé TextWatcher vérifier lorsque la valeur est remplie en utilisant une instruction if. Cependant, lorsque le code pour révéler le bouton est exécuté, l'application se bloque en disant que textwatcher a cessé de fonctionner. Je suis assez nouveau pour Android en développement, donc c'est probablement moi foutu.Comment rendre mon bouton visible avec TextChanger?

Voici mon code:

public class MainActivity extends AppCompatActivity 
{ 
    private EditText UserInput; 
    private Button button; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button button = (Button)findViewById(R.id.button); 
     UserInput = (EditText) findViewById(R.id.UserInput); 
     UserInput.addTextChangedListener(watch); 
    } 

    TextWatcher watch = new TextWatcher() 
    { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

      if(s.toString().equals("teststring")){ 
       //program crashes when it reaches this part 
       button.setVisibility(View.VISIBLE); 
      } 
      else 
      { 

      } 
     } 
     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    };  
} 
+0

postez votre logcat – Moulesh

Répondre

0

Modifier cette ligne

Button button = (Button)findViewById(R.id.button); 

à

button = (Button)findViewById(R.id.button); 

Alors que le bouton de membre de classe initialisées

1

Vous avez déjà défini votre Button comme global la variable ici:

private Button button; 

Mais lorsque vous définissez des vues à l'intérieur de la méthode onCreate vous définissez une locale variable de Button et instancier, voici:

Button button = (Button)findViewById(R.id.button); 

plus tard lorsque vous appelez setVisibility sur Button, vous appelez cette méthode sur la variable Global qui n'a pas été instanciée .. Pour résoudre ce thi s simple question Changez votre méthode onCreate comme ceci:

button = (Button)findViewById(R.id.button); 

Ainsi, la Variable globale obtenir instancié.