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 中使用它来恢复您的微调器。
尚未找到此特定问题的答案,但使用了另一种方法来显示可在此处找到的初始值:
仍然欢迎任何关于我第一次尝试出了什么问题的澄清。
我有一个碎片,里面有各种 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 中使用它来恢复您的微调器。
尚未找到此特定问题的答案,但使用了另一种方法来显示可在此处找到的初始值:
仍然欢迎任何关于我第一次尝试出了什么问题的澄清。