2017-10-22 5 views
2

Ich bin neu bei Android und ich weiß nicht mehr darüber. Zum Üben habe ich mit Spinnern, Buttons und deren Attribut manipuliert.Wie eine Schaltfläche programmgesteuert aktivieren, wenn es im Layout deaktiviert ist

Ich habe 4 Spinner und 1. Spinner entscheidet 2. Spinner Werte und so weiter. Ich habe eine Schaltfläche (Android: enabled = "false" in xml), die unter dem 4. Spinner befindet und es hat einen Klick-Listener, sein Click-Ereignis zeigt Toast über das, was Sie in allen Spinner auswählen.

Alle Spinner-Werte sind in String-Array und ich möchte alle Spinner überprüfen und validieren. Wenn einer der Spinner nicht als erster Index des Arrays ausgewählt ist, wird die Schaltfläche aktiviert, andernfalls wird sie deaktiviert.

Ich habe viele Male versucht, aber nicht erwartete Ergebnisse erhalten. Kann mir jemand helfen, mein Problem zu lösen?

Hier ist mein Code für Schaltfläche und Spinner-Validierung:

public boolean isDefaultValue(Spinner spinner){ 
    if (spinner.getSelectedItemPosition() == 0){ 
     resultButton.setEnabled(false); 
    } else { 
     resultButton.setEnabled(true); 
    } 
    return false; 
} 
‎ 
resultButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (isDefaultValue(sp4)) { 
       Toast.makeText(getApplicationContext(), "Country : " + sp1.getSelectedItem().toString() + "\n" + 
         "State : " + sp2.getSelectedItem().toString() + "\n" + 
         "City : " + sp3.getSelectedItem().toString() + "\n" + 
         "Area : " + sp4.getSelectedItem().toString(), Toast.LENGTH_LONG).show(); 
      } 
} 
}); 
+0

** Wenn einer der Spinner nicht ausgewählt ist 1. Index der Array ** Was meinst du damit? – Jerrol

+0

Der Array-Index beginnt immer bei 0, aber Ihr Code deaktiviert die Schaltfläche, wenn die selectedItemPosition == 0 ;. – Jerrol

+0

Außerdem überprüfen Sie nur für einen Spinner, während Sie für alle Spinner überprüfen möchten –

Antwort

0

Ihre Methode isDefaultValue(Spinner) immer eine false unabhängig von Taste aktiviert werden zurückkommen würde oder nicht, und daher stellt sich nie den Toast.

Zusätzlich Ihre Beschreibung lautet:

Wenn einer von ihnen Spinner nicht ersten Index des Arrays ausgewählt wird, dann wird Schaltfläche

Aber nach den isDefaultValue(Spinner) Verfahren aktiviert wird, wird die Schaltfläche aktiviert nur wenn der Spinner nicht im 1. Index des Arrays steht (0).

+0

public boolean isDefaultValue (Spinner Spinner) { if (spinner.getSelectedItemPosition() == 0) { resultButton.setEnabled (false); } Rückkehr wahr; } funktioniert es immer noch nicht, kannst du mir bitte sagen, wie es gelöst wird. Meine E-Mail ist [email protected] –

+0

Ich bemerkte einen weiteren Fehler. Ihre Schaltfläche ist nicht wie in der XML-Datei aktiviert. Dies würde das onClick-Ereignis nicht auslösen. Da Ihr Verfahren auf die Schaltfläche liegt innerhalb der onClick-Methode zu ermöglichen, ist dies ein Deadlock ist die Taste nicht verursacht bei allen –

+0

sp4.setOnItemSelectedListener (neu AdapterView.OnItemSelectedListener() { @Override public void aktiviert werden onItemSelected (AdapterView adapterView, Ansicht Ansicht, int i, lange l) { if (sp4.getSelectedItemPosition() == 0) { resultButton.setEnabled (false); } else { resultButton.setEnabled (true);} } resultButton. setOnClickListener (new View.OnClickListener() { Jetzt funktioniert es gut. Vielen Dank Kumpel –

Verwandte Themen