Android Open Source - HydraListAndroid Plain Adapter Helper






From Project

Back to project page HydraListAndroid.

License

The source code is released under:

Apache License

If you think the Android project HydraListAndroid listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.fada21.android.hydralist.helper;
//  w w  w. j  a  v a2 s .  c  o  m
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.fada21.android.hydralist.data.HydraListDataProvider;
import com.fada21.android.hydralist.data.HydraListItem;
import com.fada21.android.hydralist.util.HydraListConsts;
import com.fada21.android.hydralist.util.HydraListUtils;

/**
 * Plain adapter that servers common adapter tasks besides of expansion adapter helpers
 */
public abstract class PlainAdapterHelper<T extends HydraListItem> extends HydraListAdapterHelper<T> {

  public static final String TAG = "PlainAdapterHelper";

  private final int itemLayout;
  protected final LayoutInflater inflater;
  private final Class<? extends HydraListViewHolder> viewHolderClass;

  /**
   * Constructor with viewHolder support disabled;
   * 
   * @param ctx
   * @param itemLayout
   *            list item layour; pass {@link HydraListConsts#UNSET} to force always running setupPlainView with new convertView
   */
  public PlainAdapterHelper(Context ctx, int itemLayout) {
    super(ctx);
    inflater = LayoutInflater.from(context);
    this.itemLayout = itemLayout;
    this.viewHolderClass = null;
  }

  /**
   * Constructor with viewHolder support enabled;
   * 
   * @param ctx
   * @param itemLayout
   *            list item layour; pass {@link HydraListConsts#UNSET} to force running setupPlainView with always recreated convertView
   */
  public PlainAdapterHelper(Context ctx, int itemLayout, Class<? extends HydraListViewHolder> viewHolderClass) {
    super(ctx);
    inflater = LayoutInflater.from(context);
    this.itemLayout = itemLayout;
    this.viewHolderClass = viewHolderClass;
  }

  /**
   * Provides list item layout resource id. Layout shall be inflated from this resource.
   * 
   * @return
   */
  public int getItemLayout() {
    return itemLayout;
  }

  @Override
  public void ensureCompliance(HydraListDataProvider<T> dataProvider) throws IllegalArgumentException {

    if (itemLayout == HydraListConsts.UNSET && itemLayout > 0) {
      throw new IllegalStateException("Must provide resource id for item view (itemLayout)");
    }
  }

  public View newView(ViewGroup parent) {
    View newView = inflater.inflate(itemLayout, parent, false);
    if (hasViewHolderClass()) {
      newView.setTag(itemLayout, createViewHolder(newView));
    }
    return newView;
  }

  public boolean hasViewHolderClass() {
    return viewHolderClass != null;
  }

  private HydraListViewHolder createViewHolder(View viewWithoutTag) {
    HydraListViewHolder viewHolder = null;
    try {
      viewHolder = (HydraListViewHolder) viewHolderClass.newInstance();
      viewHolder.initViewHolder(viewWithoutTag);
    } catch (InstantiationException e) {
      HydraListUtils.logd(TAG, "Error during viewHolder instantiation! There won't be any viewHolder", e);
    } catch (IllegalAccessException e) {
      HydraListUtils.logd(TAG, "Error during viewHolder instantiation! There won't be any viewHolder either. No f*cking way!", e);
    }
    return viewHolder;
  }

/**
   * <p>
   * Setups plain view of a list item.
   * </p><p>
   * This method or {@link #setupPlainView(View, HydraListItem) should be implemented. 
   * It depends on whether user supplied ViewHolder class.
   * If there is several view types it may be not easy to use view holder.
   * </p>
   * 
   * @param viewHolder
   *            viewHolder to bind
   * @param data
   *            to be filled
   */
  public abstract void bindView(HydraListViewHolder viewHolder, T data);

/**
   * <p>
   * Setups plain view of a list item.
   * </p><p>
   * This method or {@link #bindView(HydraListViewHolder, HydraListItem) should be implemented. 
   * It depends on whether user supplied ViewHolder class.
   * </p>
   * 
   * @param convertView
   *            view to alter, may be null ifn unset layout was provided in constructor
   * @param data
   *            to be filled
   */
  public abstract void setupPlainView(ViewGroup parent, View convertView, T data);

}




Java Source Code List

com.fada21.android.hydralist.HydraListAdapter.java
com.fada21.android.hydralist.HydraListView.java
com.fada21.android.hydralist.data.HydraListDataProvider.java
com.fada21.android.hydralist.data.HydraListItem.java
com.fada21.android.hydralist.data.ListDataProvider.java
com.fada21.android.hydralist.dragable.DragableAdapterHelper.java
com.fada21.android.hydralist.dragable.DragableConsts.java
com.fada21.android.hydralist.dragable.DragableListViewDelegate.java
com.fada21.android.hydralist.dragable.interfaces.DragableListItem.java
com.fada21.android.hydralist.dragable.interfaces.OnItemMovedListener.java
com.fada21.android.hydralist.dragable.interfaces.Swappable.java
com.fada21.android.hydralist.expandable.BasicExpandableListItem.java
com.fada21.android.hydralist.expandable.ExpandableViewHolder.java
com.fada21.android.hydralist.expandable.ExpandingAdapterHelper.java
com.fada21.android.hydralist.expandable.ExpandingLayout.java
com.fada21.android.hydralist.expandable.ExpandingListViewDelegate.java
com.fada21.android.hydralist.expandable.interfaces.ExpandableListItem.java
com.fada21.android.hydralist.expandable.interfaces.OnSizeChangedListener.java
com.fada21.android.hydralist.helper.HydraListAdapterHelper.java
com.fada21.android.hydralist.helper.HydraListViewHolder.java
com.fada21.android.hydralist.helper.PlainAdapterHelper.java
com.fada21.android.hydralist.sample.CustomExpandingAdapterHelper.java
com.fada21.android.hydralist.sample.SampleConsts.java
com.fada21.android.hydralist.sample.SampleContents.java
com.fada21.android.hydralist.sample.SampleDataProvider.java
com.fada21.android.hydralist.sample.SampleHydraListActivity.java
com.fada21.android.hydralist.sample.SampleListItem.java
com.fada21.android.hydralist.sample.SamplePlainAdapterHelper.java
com.fada21.android.hydralist.sample.SampleViewHolder.java
com.fada21.android.hydralist.util.HydraListConsts.java
com.fada21.android.hydralist.util.HydraListUtils.java
com.fada21.android.hydralist.util.PublicListView.java