protected void updateChildren() { if (!hasDataBoundChildren && view instanceof ViewGroup) { ViewGroup parent = (ViewGroup) view; int count = parent.getChildCount(); View child; for (int index = 0; index < count; index++) { child = parent.getChildAt(index); if (child instanceof ProteusView) { ((ProteusView) child).getViewManager().update(dataContext.getData()); } } } } }
/** * This is a copy constructor for creating a clone of * another data context. The {@link #hasOwnProperties} * is always {@code false} for a cloned data context. * * @param dataContext the parent data context to clone from. */ public DataContext(DataContext dataContext) { this.data = dataContext.getData(); this.scope = dataContext.getScope(); this.index = dataContext.getIndex(); this.hasOwnProperties = false; }
@Override public void onBindViewHolder(ProteusViewHolder holder, int position) { DataContext context = DataContext.create(holder.context, data, position, scope); holder.view.getViewManager().update(context.getData()); }
public void handleBinding(V view, Binding value) { DataContext dataContext = ((ProteusView) view).getViewManager().getDataContext(); Value resolved = evaluate(value, view.getContext(), dataContext.getData(), dataContext.getIndex()); handleValue(view, resolved); }
@NonNull @Override public SimpleListAdapter create(@NonNull ProteusRecyclerView view, @NonNull ObjectValue config) { Layout layout = config.getAsObject().getAsLayout(ATTRIBUTE_ITEM_LAYOUT); Integer count = config.getAsObject().getAsInteger(ATTRIBUTE_ITEM_COUNT); ObjectValue data = view.getViewManager().getDataContext().getData(); ProteusContext context = (ProteusContext) view.getContext(); return new SimpleListAdapter(context.getInflater(), data, layout, count != null ? count : 0); } };
@Override public boolean handleChildren(T view, Value children) { ProteusView proteusView = ((ProteusView) view); ProteusView.Manager viewManager = proteusView.getViewManager(); ProteusLayoutInflater layoutInflater = viewManager.getContext().getInflater(); ObjectValue data = viewManager.getDataContext().getData(); int dataIndex = viewManager.getDataContext().getIndex(); if (children.isArray()) { ProteusView child; Iterator<Value> iterator = children.getAsArray().iterator(); Value element; while (iterator.hasNext()) { element = iterator.next(); if (!element.isLayout()) { throw new ProteusInflateException("attribute 'children' must be an array of 'Layout' objects"); } child = layoutInflater.inflate(element.getAsLayout(), data, view, dataIndex); addView(proteusView, child); } } return true; }