Spinner.setSelection wird nicht ausgelöst, richtig OnItemSelectedListener
Ich gerade arbeite, auf einem Konto-Management-Aktivitäten für mein Android-Anwendung, und ich habe Mühe herauszufinden, warum die setSelection() Methode von einem spinner nicht auslösen OnItemSelectedListener angebracht, sagte Spinner.
Hier ist, was ich derzeit habe;
onCreate () - Methode :
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.account_management);
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
retreiveLanguage();
initializeUI();
//Vérification si l'usager est déjà connecté
Globals appState = ((Globals) this.getApplication());
boolean userLoggedIn = appState.isUserLoggedIn();
boolean userInfoAvailable = appState.isUserInfoAvailable();
if (userLoggedIn && userInfoAvailable) {
fillUI();
}
}
Entsprechende Zeilen aus der initializeUI () - Methode, die aufgerufen wird, auf die Tätigkeit der Schaffung, das zeigt die Bindung der Spinner den Hörer :
/** OnItemSelectedHandler for the Country Spinner */
mCountrySpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
Log.i(TAG, "onCountrySelected() was called, position : " + pos);
mProvinces = new ArrayList<String>();
mProvincesCode = new ArrayList<String>();
mXML.parseResponse(FileManager.getInstance().getPortalOptions());
for (int i = 0; i < mXML.getCountry(pos).sizeProvinces(); i++){
mProvinces.add(mXML.getCountry(pos).getProvince(i).getLabel(mLanguage));
mProvincesCode.add(mXML.getCountry(pos).getProvince(i).getCode());
}
mProvinceArrayAdapter = new ArrayAdapter<String>(ManageAccountActivity.this,
android.R.layout.simple_spinner_item, mProvinces);
mProvinceArrayAdapter.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
mProvinceSpinner.setAdapter(mProvinceArrayAdapter);
}
public void onNothingSelected(AdapterView<?> arg0) {
//Do Nothing ...
}
});
Wieder ein paar Zeilen, diesmal aus dem fillUI Methode() :
Log.i(TAG, "Setting country based on user information.");
((Spinner) findViewById(R.id.spin_country))
.setSelection(mCountriesCode.indexOf(mUser.getCountry()));
//TODO : Fix Provinces and States not being changed accordingly
Log.i(TAG, "Setting province based on user information.");
((Spinner) findViewById(R.id.spin_province))
.setSelection(mProvincesCode.indexOf(mUser.getProvince()));
Also mit diesem würde ich erwarten, dass die OnItemSelectedListener genannt zu werden, direkt nachdem ich die Auswahl in der fillUI () - Methode, aber das ist nicht das, was passiert, Laufzeit :S
Hier mein LogCat-Auszug, der zeigt, dass der Listener nicht aufgerufen, wenn die Selektion wird angewendet, um das Land der spinner:
I/ManageAccountActivity(28108): Einstellung Land, basierend auf Benutzer-Informationen.
I/ManageAccountActivity(28108): Einstellung Provinz, basierend auf Benutzer-Informationen.
I/ManageAccountActivity(28108): onCountrySelected() wurde aufgerufen, Stellung : 1
Als ein experiment, ich habe auch versucht, indem die fillUI () - Aufruf in der onStart-Methode für meine Tätigkeit, aber das nicht ändern, wie die Anwendung reagiert.
Vielen Dank im Voraus für jegliche Hinweise, Hilfe oder Tipps !
Gut ich ändere es ... verschieben Sie die Auswahl von 0 auf 1 wäre das nicht betrachtet, verändert ?
InformationsquelleAutor Jean-Philippe Roy | 2012-01-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht, setzen Sie den spinner mit zwei Argumenten, der zweite mit einem boolean:
Aus der Entwickler-Seite es zeigt sich:
Gut danke sehr viel, ich sollte haben versucht, die Einstellung true in Erster Linie :P.-Einstellung beide Spinner' zu setSelection(pos, true) hat den trick.
Falsch, die Einstellung 'animieren' param ist NICHT verbunden mit brennen OnItemSelectedListener.
Ich habe gerade getestet, und mit der Methode mit
animate
in der Tat löstonItemSelected
ohne nicht.Warum ist Android so gebrochen!
InformationsquelleAutor Nick
Einfach den folgenden code verwenden:
InformationsquelleAutor Aman Goel
Fand ich die Lösung zu meinem problem, dass das hinzufügen dieser auf die onCreate-Methode. Das Programm funktioniert aber nur für die erste Auswahl. Das zweite mal, dass ich wählen Sie das Programm stürzt der emulator.
InformationsquelleAutor Tarnow
Fand ich, dass setSelection(pos) funktioniert, wenn Sie erklären
vorher.
InformationsquelleAutor Taha