package io.pivotal.arca.adapters; import android.annotation.SuppressLint; import android.os.Build; import android.util.SparseArray; import android.view.View; class ViewHelper { public static View getView(final View container, final int viewId) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { return getViewFromHolder(container, viewId); } else { return getViewFromTag(container, viewId); } } private static View getViewFromTag(final View container, final int viewId) { final View view = (View) container.getTag(viewId); if (view == null) { return getViewAndSetTag(container, viewId); } else { return view; } } @SuppressLint("ViewTag") private static View getViewAndSetTag(final View container, final int viewId) { final View view = container.findViewById(viewId); container.setTag(viewId, view); return view; } private static View getViewFromHolder(final View container, final int viewId) { final ViewHolder holder = (ViewHolder) container.getTag(); if (holder == null) { return getViewAndCreateHolder(container, viewId); } else { return getViewFromHolder(container, viewId, holder); } } private static View getViewAndCreateHolder(final View container, final int viewId) { final ViewHolder holder = new ViewHolder(container); return getViewAndAddToHolder(container, viewId, holder); } private static View getViewAndAddToHolder(final View container, final int viewId, final ViewHolder holder) { final View view = container.findViewById(viewId); holder.put(viewId, view); return view; } private static View getViewFromHolder(final View container, final int viewId, final ViewHolder holder) { final View view = holder.get(viewId); if (view == null) { return getViewAndAddToHolder(container, viewId, holder); } else { return view; } } private static final class ViewHolder extends SparseArray<View> { public ViewHolder(final View container) { container.setTag(this); } } }