Android spinner在rotate上表现怪异

Android spinner在rotate上表现怪异,android,spinner,Android,Spinner,我有一个有各种纺纱机的粉碎机。为了让这些微调器显示初始(不可选择)值,我使用了一个自定义的arrayAdapter(SpinnerHintAdapter)。该类所做的唯一重要的事情是重写getCount(),这样就不会显示选择数组的最后一项,这是存储初始值的地方。 这一切都可以正常工作,直到您旋转设备,然后出于某种原因将微调器设置为列表的最后一个正常值,即使Fragment类仍然认为它设置为初始值。 有人知道为什么会发生这种情况和/或如何解决这个问题吗 代码示例: 片段: @Override p

我有一个有各种纺纱机的粉碎机。为了让这些微调器显示初始(不可选择)值,我使用了一个自定义的arrayAdapter(SpinnerHintAdapter)。该类所做的唯一重要的事情是重写getCount(),这样就不会显示选择数组的最后一项,这是存储初始值的地方。
这一切都可以正常工作,直到您旋转设备,然后出于某种原因将微调器设置为列表的最后一个正常值,即使Fragment类仍然认为它设置为初始值。
有人知道为什么会发生这种情况和/或如何解决这个问题吗

代码示例:
片段:

@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;
}
字符串数组示例

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

对
不
(初始值)

旋转设备时会重新创建活动。您需要重写onSavedInstanceState函数,将数据保存在捆绑包中,然后在onCreate中再次使用该数据

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

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

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


任何关于我第一次尝试出错原因的澄清都是受欢迎的。

这不是我问的问题,我知道这一点,但与我的问题无关。问题是,应该在onCreate方法中设置的初始值不再被选中,而另一个值被选中。此时,每次我旋转设备时,该值应重置为初始值(列表的最后一个),但它会设置为列表中的最后一个元素。我认为这个答案非常有用。可能会发生这样的情况:活动被重新创建,而片段没有被重新创建。不,我检查了片段的onCreate方法是否被再次调用,因为您编写了
onCreateView
而不是
onCreate
。两者都被调用?对不起,我的意思是
onCreateView
,我假设
onCreate
也被调用了,但我现在不使用它。似乎
pet.setSelection(pet.getCount())
应该用
0
1
caz
pet.getCount()
返回
2
。或者你的hacky
getCount
在Spinner中混淆了一些东西:/它应该返回2,因为我想显示初始值。也许你可以通过仅使用微调器来避免所有这些麻烦(具有可选项),并以另一种方式显示其他项?我想解决这个问题,因为这符合我正在创建的内容,我不想寻找方法来避免它。
@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    //save your data
}