[选中项目后更改微调框列表内容,Android

问题描述 投票:0回答:1

选择后是否有办法在Spinner内更改显示的列表。我有2个StringsEnglishFinnish,我想在选择一个时首先更改其语言,然后在选择另一个时更改其顺序。

private void initLanguageSpinner() {

    List<String> spinnerLocale = new ArrayList<>();
    if ((currentdocumentLocale.toString().startsWith("deviceNameFi") || currentdocumentLocale.getLanguage().equals("fi"))) {
        spinnerLocale.add(getLocalizedResources(context, currentdocumentLocale).getString(R.string.finnish_language));
        spinnerLocale.add(getLocalizedResources(context, currentdocumentLocale).getString(R.string.english_language));
    } else {
        spinnerLocale.add(getLocalizedResources(context, currentdocumentLocale).getString(R.string.english_language));
        spinnerLocale.add(getLocalizedResources(context, currentdocumentLocale).getString(R.string.finnish_language));

    }

    ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), R.layout.document_spinner_item, spinnerLocale);
    adapter.setDropDownViewResource(R.layout.document_spinner_dropdown_item);
    customerSelectedLanguageSpinner.setAdapter(adapter);
    customerSelectedLanguageSpinner.setSelection(0, false);
    customerSelectedLanguageSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            if (customerSelectedLanguageSpinner.getSelectedItem().toString().equals(getLocalizedResources(context, currentdocumentLocale).getString(R.string.finnish_language))) {
                onLocaleChangedFi();
                initLanguageSpinner();
            } else if (customerSelectedLanguageSpinner.getSelectedItem().toString().equals(getLocalizedResources(context, currentdocumentLocale).getString(R.string.english_language))) {
                onLocaleChangedEng();
                initLanguageSpinner();
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
}

通过这样做基本上可以满足我的需要,但是由于初始化后总是调用onItemSelected,即使我执行了.setSelection(0, false),也进入了一个无限循环。有什么方法可以满足我的需求?

android spinner android-adapter onitemclicklistener onitemselectedlistener
1个回答
0
投票

您的代码是一个死循环。如果适配器项目数据已更改,则可以使用

[notifyDataSetChanged方法。

通知附加的观察者基础数据已更改,任何反映该数据集的视图都应刷新自己。

if (customerSelectedLanguageSpinner.getSelectedItem().toString().equals(getLocalizedResources(context, currentdocumentLocale).getString(R.string.finnish_language))) {
                onLocaleChangedFi();
                adapter.notifyDataSetChanged()
            } else if (customerSelectedLanguageSpinner.getSelectedItem().toString().equals(getLocalizedResources(context, currentdocumentLocale).getString(R.string.english_language))) {
                onLocaleChangedEng();
                adapter.notifyDataSetChanged();
            }

然后视图将更新,但不会初始化。

第二,您也可以设置一个标签,以便在不调用onItemSelected时进行初始化。像这样的代码:

//define a tag when first it is 0
int check = 0;
//then in the onItemSelected add a check condition
public void onItemSelected(AdapterView<?> parent, View arg1, int pos,long id) {
   if(++check > 1) {
      //do some things when item selected.
   }
}

但是我建议使用第一种方法。

© www.soinside.com 2019 - 2024. All rights reserved.