13561e3e665698843b1c664385a842e779198960bGeorge Mount/* 23561e3e665698843b1c664385a842e779198960bGeorge Mount * Copyright (C) 2015 The Android Open Source Project 33561e3e665698843b1c664385a842e779198960bGeorge Mount * 43561e3e665698843b1c664385a842e779198960bGeorge Mount * Licensed under the Apache License, Version 2.0 (the "License"); 53561e3e665698843b1c664385a842e779198960bGeorge Mount * you may not use this file except in compliance with the License. 63561e3e665698843b1c664385a842e779198960bGeorge Mount * You may obtain a copy of the License at 73561e3e665698843b1c664385a842e779198960bGeorge Mount * 83561e3e665698843b1c664385a842e779198960bGeorge Mount * http://www.apache.org/licenses/LICENSE-2.0 93561e3e665698843b1c664385a842e779198960bGeorge Mount * 103561e3e665698843b1c664385a842e779198960bGeorge Mount * Unless required by applicable law or agreed to in writing, software 113561e3e665698843b1c664385a842e779198960bGeorge Mount * distributed under the License is distributed on an "AS IS" BASIS, 123561e3e665698843b1c664385a842e779198960bGeorge Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133561e3e665698843b1c664385a842e779198960bGeorge Mount * See the License for the specific language governing permissions and 143561e3e665698843b1c664385a842e779198960bGeorge Mount * limitations under the License. 153561e3e665698843b1c664385a842e779198960bGeorge Mount */ 16fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.adapters; 173561e3e665698843b1c664385a842e779198960bGeorge Mount 18fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.BindingAdapter; 193561e3e665698843b1c664385a842e779198960bGeorge Mountimport android.widget.AbsSpinner; 203561e3e665698843b1c664385a842e779198960bGeorge Mountimport android.widget.ArrayAdapter; 213561e3e665698843b1c664385a842e779198960bGeorge Mountimport android.widget.SpinnerAdapter; 223561e3e665698843b1c664385a842e779198960bGeorge Mount 23c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mountimport java.util.List; 24c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount 253561e3e665698843b1c664385a842e779198960bGeorge Mountpublic class AbsSpinnerBindingAdapter { 263561e3e665698843b1c664385a842e779198960bGeorge Mount 2710960eb5f73fd587c2f8d18cfc61873c04017512George Mount @BindingAdapter({"android:entries"}) 28c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount public static <T extends CharSequence> void setEntries(AbsSpinner view, T[] entries) { 293561e3e665698843b1c664385a842e779198960bGeorge Mount if (entries != null) { 303561e3e665698843b1c664385a842e779198960bGeorge Mount SpinnerAdapter oldAdapter = view.getAdapter(); 313561e3e665698843b1c664385a842e779198960bGeorge Mount boolean changed = true; 321b9940e612fc73202837fbe9db2f9035f307b5d1George Mount if (oldAdapter != null && oldAdapter.getCount() == entries.length) { 333561e3e665698843b1c664385a842e779198960bGeorge Mount changed = false; 343561e3e665698843b1c664385a842e779198960bGeorge Mount for (int i = 0; i < entries.length; i++) { 3571eb6908f2689bd17000237eb645896c36da0138George Mount if (!entries[i].equals(oldAdapter.getItem(i))) { 363561e3e665698843b1c664385a842e779198960bGeorge Mount changed = true; 373561e3e665698843b1c664385a842e779198960bGeorge Mount break; 383561e3e665698843b1c664385a842e779198960bGeorge Mount } 393561e3e665698843b1c664385a842e779198960bGeorge Mount } 403561e3e665698843b1c664385a842e779198960bGeorge Mount } 413561e3e665698843b1c664385a842e779198960bGeorge Mount if (changed) { 423561e3e665698843b1c664385a842e779198960bGeorge Mount ArrayAdapter<CharSequence> adapter = 433561e3e665698843b1c664385a842e779198960bGeorge Mount new ArrayAdapter<CharSequence>(view.getContext(), 443561e3e665698843b1c664385a842e779198960bGeorge Mount android.R.layout.simple_spinner_item, entries); 453561e3e665698843b1c664385a842e779198960bGeorge Mount adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 463561e3e665698843b1c664385a842e779198960bGeorge Mount view.setAdapter(adapter); 473561e3e665698843b1c664385a842e779198960bGeorge Mount } 483561e3e665698843b1c664385a842e779198960bGeorge Mount } else { 493561e3e665698843b1c664385a842e779198960bGeorge Mount view.setAdapter(null); 503561e3e665698843b1c664385a842e779198960bGeorge Mount } 513561e3e665698843b1c664385a842e779198960bGeorge Mount } 52c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount 53c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount @BindingAdapter({"android:entries"}) 54c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount public static <T> void setEntries(AbsSpinner view, List<T> entries) { 55c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount if (entries != null) { 56c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount SpinnerAdapter oldAdapter = view.getAdapter(); 57c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount if (oldAdapter instanceof ObservableListAdapter) { 58c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount ((ObservableListAdapter) oldAdapter).setList(entries); 59c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount } else { 60c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount view.setAdapter(new ObservableListAdapter<T>(view.getContext(), entries, 61c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount android.R.layout.simple_spinner_item, 62c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount android.R.layout.simple_spinner_dropdown_item, 0)); 63c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount } 64c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount } else { 65c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount view.setAdapter(null); 66c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount } 67c7cd9c61e55b43b712d20f855ca59d6fbc49e5b1George Mount } 683561e3e665698843b1c664385a842e779198960bGeorge Mount} 69