Tôi hiện đang làm việc trên Hoạt động quản lý tài khoản cho ứng dụng Android của mình và tôi đang gặp khó khăn trong việc tìm ra lý do tại sao phương pháp setSelection() từ trình quay không kích hoạt OnItemSelectedListener đính kèm với Spinner đã nói .Spinner.setSelection không kích hoạt OnItemSelectedListener đúng
Đây là những gì tôi hiện có;() Phương pháp
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();
}
}
dòng thích hợp từ initializeUI() phương pháp được gọi là ngày thành lập của Hoạt động trong đó cho thấy sự gắn kết của các Spinner Listener:
/** 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 ...
}
});
Và một lần nữa một vài dòng khác, lần này từ phương thức 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()));
Vì vậy, với thi Tôi mong đợi OnItemSelectedListener được gọi ngay sau khi tôi thiết lập lựa chọn trong phương thức fillUI(), nhưng đó không phải là những gì đang xảy ra trong thời gian chạy: S
Đây là phần trích xuất LogCat cho thấy Trình nghe không được gọi khi lựa chọn được áp dụng cho quốc gia spinner:
I/ManageAccountActivity (28108): Đặt quốc gia dựa trên thông tin người dùng.
I/ManageAccountActivity (28108): Đặt tỉnh dựa trên thông tin người dùng.
I/ManageAccountActivity (28.108): onCountrySelected() được gọi, vị trí: 1
Là một thử nghiệm, tôi cũng đã cố gắng đặt cuộc gọi fillUI() trong phương thức onStart của Hoạt động của tôi, nhưng didn rằng' t thay đổi cách ứng dụng phản ứng.
Cảm ơn trước cho bất kỳ gợi ý, trợ giúp hoặc mẹo nào!
, OnItemSelectedListener chỉ được kích hoạt khi bạn thực hiện một số thao tác trên spinner..để thay đổi –
Tôi cũng thay đổi ... di chuyển lựa chọn từ 0 đến 1 sẽ không được xem là thay đổi? –