我對其中的各種Spinners有興趣。爲了讓這些spinners顯示一個初始值(非可選值),我使用了一個自定義的arrayAdapter(SpinnerHintAdapter)。這個類所做的唯一重要的事情就是覆蓋getCount(),這樣就不會顯示選擇數組的最後一項,這就是初始值的存儲位置。
這一切工作正常,直到你旋轉設備,然後由於某種原因,旋轉器設置在列表的最後正常值,即使Fragment類仍然認爲它設置在初始值。
任何人都知道爲什麼發生這種情況和/或如何解決這個問題?Android旋轉器在旋轉時動作不可思議
代碼示例:
片段:
@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>
似乎'pet.setSelection(pet.getCount())'應該用'0'或'1' caz'pet.getCount()'返回'2'來調用。或者你的hacky'getCount'在Spinner中混淆了某些事物。 :/ – ytRino 2015-02-24 10:27:56
它應該返回2,因爲我想要顯示初始值 – dashhund 2015-02-24 10:42:04
也許你可以避免所有這些麻煩,只用於它的意圖(有可選項目)的微調,並以另一種方式顯示這個其他項目? – lordstyx 2015-02-24 13:00:20