为啥 Spinner 中的第一项不起作用
Posted
技术标签:
【中文标题】为啥 Spinner 中的第一项不起作用【英文标题】:Why is the first item in the Spinner not working为什么 Spinner 中的第一项不起作用 【发布时间】:2019-12-31 08:53:58 【问题描述】:我希望微调器从以下 3 个国家/地区中进行选择,但我只能访问第二个和第三个选项。当我选择第一个选项时,微调器不起作用。
String[] countries = "INDIA","AUSTRALIA","ENGLAND";
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id)
if (!mSpinnerInitialized)
mSpinnerInitialized = true;
return;
if(spinner.getSelectedItem().toString().equals("INDIA"))
LocaleManager.setNewLocale(LoginActivity.this, "en");
restart();
else if(spinner.getSelectedItem().toString().equals("AUSTRALIA"))
LocaleManager.setNewLocale(LoginActivity.this, "si");
restart();
else if(spinner.getSelectedItem().toString().equals("ENGLAND"))
LocaleManager.setNewLocale(LoginActivity.this, "ta");
restart();
Toast.makeText(LoginActivity.this, spinner.getSelectedItem().toString(), Toast.LENGTH_LONG).show();
微调器初始化
ArrayAdapter aa = new ArrayAdapter(this,R.layout.languagespinner,countries);
aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(aa);
应该可以访问名为 INDIA 的微调器文本,但不幸的是我无法访问。
编辑
这可能是因为 mSpinnerInitialized 但如果我删除它,活动将在无限循环中重新启动
【问题讨论】:
检查,如果 (spinner.getSelectedItem().toString.equals("INDIA") 为真,通过使用 System.out 或 toast 或日志。也许你错过了什么。你能告诉我们微调器的 xml 以及如何用值填充它? 使用 android 调试器并停止第一个 if 并检查您的值 当我按下微调器的第一项时,它不会进入 onselected 方法 如果条件有效,则第二个和第三个 你能告诉我们 Spinner 初始化吗? 【参考方案1】:将您的代码更改为:
private String[] arraySpinner;
在onCreate
中这样做:
this.arraySpinner = new String[]"INDIA", "AUSTRALIA", "ENGLAND";
Spinner yourSpinner = findViewById(R.id.yourSpinnerID);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, arraySpinner);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
yourSpinner.setAdapter(adapter);
yourSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
String selectedItem = parent.getItemAtPosition(position).toString();
if(selectedItem.equals("INDIA"))
// DO YOUR LOGIC
要更改您的语言,请使用以下代码:
public class LocaleHelper
private static final String SELECTED_LANGUAGE = "Locale.Helper.Selected.Language";
public static void onCreate(Context context)
String lang;
if(getLanguage(context).isEmpty())
lang = getPersistedData(context, Locale.getDefault().getLanguage());
else
lang = getLanguage(context);
setLocale(context, lang);
public static void onCreate(Context context, String defaultLanguage)
String lang = getPersistedData(context, defaultLanguage);
setLocale(context, lang);
public static String getLanguage(Context context)
return getPersistedData(context, Locale.getDefault().getLanguage());
public static void setLocale(Context context, String language)
persist(context, language);
updateResources(context, language);
private static String getPersistedData(Context context, String defaultLanguage)
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(SELECTED_LANGUAGE, defaultLanguage);
private static void persist(Context context, String language)
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(SELECTED_LANGUAGE, language);
editor.apply();
private static void updateResources(Context context, String language)
Locale locale = new Locale(language);
Locale.setDefault(locale);
Resources resources = context.getResources();
Configuration configuration = resources.getConfiguration();
configuration.locale = locale;
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
并在您的 Spinner 类中使用此方法更改语言:
LocaleHelper.setLocale(this,"en") //for english;
LocaleHelper.setLocale(this, "de") // for german
并且对于重新启动使用此方法:
public static void restartActivity(Activity activity)
if (Build.VERSION.SDK_INT >= 11)
activity.recreate();
else
activity.finish();
activity.startActivity(activity.getIntent());
【讨论】:
同样的结果。点击 AUSTRALIA 和 ENGLAND 有效,但点击 INDIA 甚至没有进入 onItemSelected 方法 我测试过,它对我有用。再次清理并重建您的项目。 问题是重启方式。它确实有效。但是,由于在创建活动期间的默认值是 INDIA,因此活动会不断重启 删除所有内容并尝试我的代码,它会起作用。暂时不要使用restart,只是测试我的代码。 是的,它确实有效,哈哈。但我需要重新启动活动。这就是为什么我发现很难找到解决方案以上是关于为啥 Spinner 中的第一项不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 sbt 项目依赖项不起作用? (坚持尝试远程获取它)
放心 IntelliJ IDEA 中的 3.0.3 maven 依赖项不起作用