[英]Spinner.setSelection doesn't trigger OnItemSelectedListener properly
我正在为我的Android应用程序开发一个帐户管理活动,但是我很难弄清楚为什么来自微调器的setSelection()方法不会触发附加到所述Spinner的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()方法的相关行,该方法在Activity的创建中调用,该方法显示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 ...
}
});
又来了几行,这次来自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()));
因此,我希望在我在fillUI()方法中设置选择后立即调用OnItemSelectedListener,但这不是在运行时发生的事情:S
这是我的LogCat提取,显示当选择应用于country spinner时,不会调用Listener:
I / ManageAccountActivity(28108):根据用户信息设置国家/地区。
I / ManageAccountActivity(28108):根据用户信息设置省份。
I / ManageAccountActivity(28108):调用onCountrySelected(),位置:1
作为一个实验,我也尝试将fillUI()调用放在我的Activity的onStart方法中,但这并没有改变应用程序的反应方式。
在此先感谢您的任何指示,帮助或提示!
您是否尝试使用两个参数设置微调器,第二个使用布尔值:
.setSelection(mProvincesCode.indexOf(mUser.getProvince()), true);
从开发者页面显示:
setSelection(int position, boolean animate)
//Jump directly to a specific item in the adapter data.
只需使用以下代码:
ownerSpinnerVw.post(new Runnable() {
@Override
public void run() {
ownerSpinnerVw.setSelection(position);
}
});
我发现如果你声明,setSelection(pos)是有效的
yourSpinner.setOnItemSelectedListener(null);
在那之前。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.