Android 微调器在旋转时表现怪异

Android spinner acting weird on rotate

我有一个碎片,里面有各种 Spinners。为了让这些微调器显示初始(不可选择)值,我使用了自定义 arrayAdapter (SpinnerHintAdapter)。这个 class 做的唯一重要的事情是覆盖 getCount() 所以选择数组的最后一项不显示,这是存储初始值的地方。
这一切都很好,直到您旋转设备,然后由于某种原因将微调器设置为列表的最后一个正常值,即使片段 class 仍然认为它设置为初始值。
任何人知道为什么会发生这种情况和/或如何解决这个问题?

代码示例:
片段:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_free_top_up, container, false);
    Spinner pet = (Spinner) rootView.findViewById(R.id.pet);
    SpinnerHintAdapter<CharSequence> petAdapter = SpinnerHintAdapter.createFromResource(getActivity(),
        R.array.pet_array, android.R.layout.simple_spinner_item);
    petAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    pet.setAdapter(petAdapter);
    pet.setSelection(pet.getCount());
    return rootView;
}

SpinnerHintAdapter:

@Override
public int getCount() {
    int count = super.getCount();
    // The last item will be the hint.
    return count > 0 ? count - 1 : count;
}

示例字符串数组

<string-array name="pet_array">
    <item>Yes</item>
    <item>No</item>
    <item>(initial value)</item>
</string-array>

旋转设备时会重新创建 activity。您需要覆盖 onSavedInstanceState 函数,将数据保存在 Bundle 中,然后再次在 onCreate 中使用该数据。

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    //save your data
}

然后在您的 onCreate 中使用它来恢复您的微调器。

尚未找到此特定问题的答案,但使用了另一种方法来显示可在此处找到的初始值:

仍然欢迎任何关于我第一次尝试出了什么问题的澄清。