@Override public void propertyChanged(String key, Object oldValue, Object newValue, KrollProxy proxy) { if (key.equals(TiC.PROPERTY_FONT)) { Spinner spinner = (Spinner) nativeView; TiSpinnerAdapter<TiViewProxy> adapter = (TiSpinnerAdapter<TiViewProxy>) spinner.getAdapter(); adapter.setFontProperties(proxy.getProperties()); adapter.notifyDataSetChanged(); } else { super.propertyChanged(key, oldValue, newValue, proxy); } }
@Override protected void refreshNativeView() { // Don't allow change events here suppressChangeEvent = true; Spinner spinner = (Spinner) nativeView; if (spinner == null) { return; } try { spinner.setOnItemSelectedListener(null); int rememberSelectedRow = getSelectedRowIndex(0); // Just one column - the first column - for now. // Maybe someday we'll support multiple columns. PickerColumnProxy column = getPickerProxy().getFirstColumn(false); if (column == null) { return; } TiViewProxy[] rowArray = column.getChildren(); if (rowArray == null || rowArray.length == 0) { return; } ArrayList<TiViewProxy> rows = new ArrayList<TiViewProxy>(Arrays.asList(rowArray)); // At the moment we're using the simple spinner layouts provided // in android because we're only supporting a piece of text, which // is fetched via PickerRowProxy.toString(). If we allow // anything beyond a string, we'll have to implement our own // layouts (maybe our own Adapter too.) TiSpinnerAdapter<TiViewProxy> adapter = new TiSpinnerAdapter<TiViewProxy>( spinner.getContext(), android.R.layout.simple_spinner_item, rows); adapter.setFontProperties(proxy.getProperties()); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); if (rememberSelectedRow >= 0) { selectRow(0, rememberSelectedRow, false); } } catch (Throwable t) { Log.e(TAG, "Unable to refresh native spinner control: " + t.getMessage(), t); } finally { suppressChangeEvent = false; spinner.setOnItemSelectedListener(this); } }