मैं वर्तमान में अपने एंड्रॉइड एप्लिकेशन के लिए खाता प्रबंधन गतिविधि पर काम कर रहा हूं और मुझे लगता है कि स्पिनर से setSelection() विधि क्यों स्पिनर से जुड़ी OnItemSlectedListener को ट्रिगर नहीं करती है ।Spinner.setSelection OnItemSelectedListener को ठीक से ट्रिगर नहीं करता है
यहाँ मैं वर्तमान में है;
OnCreate() विधि:
@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();
}
}
विधि initializeUI() जो गतिविधि के निर्माण पर कहा जाता है से प्रासंगिक लाइनों जो श्रोता स्पिनर के बंधन से पता चलता:
/** 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 ...
}
});
और फिर एक और जोड़ी लाइन, इस बार fillUI विधि से():
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()));
तो थाई के साथ मैं fillII() विधि में चयन सेट करने के बाद OnItemSelectedListener को सही कहने के लिए कहूंगा, लेकिन यह नहीं है कि रनटाइम पर क्या हो रहा है: एस
यहां मेरा लॉगकट निकालना है जो दिखाता है कि श्रोता को तब नहीं कहा जाता है जब श्रोता को नहीं कहा जाता है चयन देश स्पिनर पर लागू होता है:
I/ManageAccountActivity (28108): उपयोगकर्ता जानकारी के आधार पर देश को सेट करना।
I/ManageAccountActivity (28108): उपयोगकर्ता जानकारी के आधार पर प्रांत सेट करना।
मैं/ManageAccountActivity (28108): onCountrySelected(), स्थिति बुलाया गया था: 1
एक प्रयोग के रूप में, मैं अपने गतिविधि के onStart विधि लेकिन वह didn में fillUI() कॉल डाल करने की कोशिश की ' टी बदल कैसे आवेदन प्रतिक्रिया व्यक्त की।
किसी भी संकेत दिए गए के लिए अग्रिम में या धन्यवाद, मदद युक्तियाँ!
.setSelection(mProvincesCode.indexOf(mUser.getProvince()), true);
developers page से यह पता चलता है:
setSelection(int position, boolean animate)
//Jump directly to a specific item in the adapter data.
, OnItemSlectedListener केवल तभी निकाल दिया जाता है जब आप स्पिनर पर कुछ कार्रवाई करते हैं .. –
बदलने के लिए ठीक है, मैं इसे बदलता हूं ... चयन को 0 से 1 तक ले जाना नहीं माना जाएगा? –