Android Open Source - GridListViewAdapters Child Views Click Handler






From Project

Back to project page GridListViewAdapters.

License

The source code is released under:

Apache License

If you think the Android project GridListViewAdapters 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

/**
 * Copyright 2014-present Biraj Patel/*from w w  w  .j av  a  2  s  .co  m*/
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License. You may obtain a
 * copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */
package com.birin.gridlistviewadapters.utils;

import android.view.View;
import android.view.View.OnClickListener;

import com.birin.gridlistviewadapters.R;

/**
 * The Class ChildViewsClickHandler, is a class which is responsible for setting
 * a single OnClickListener class instance to all views which want to receive
 * click events. This is achieved by tagging views with its click event-id & its
 * current card position, when click event occurs this card absolute position
 * data & event id is retrieved from view tag & passed to client in callback.
 * <p>
 * Whenever {@link getNewCard()} method is called ,a new CardViewHolder is
 * returned & user registers few children of the card for clicking, by calling
 * {@link #registerChildViewForClickEvent(View, int)} method, by using Java
 * Reflections all the views within ViewHolder are scanned in each getView
 * method call by using {@link ViewHolderPositionTagger} we will tag those child
 * views with card's absolute position if they were registered for click events
 * so that this position can be used to identify when click event happens.
 * </p>
 */
public final class ChildViewsClickHandler {

  private static int TAG_VIEW_POSITION = R.string.key_view_position;
  private static int TAG_CLICK_EVENT_ID = R.string.key_click_event_id;

  private OnClickListener onClickListener;

  public ChildViewsClickHandler(OnClickListener clickEventListener) {
    this.onClickListener = clickEventListener;
  }

  /**
   * Register child view for click event,Its recommended that ONLY children
   * view present inside a card should register for these events for parent
   * card view click events use {@link onCardClicked} call-back provided by
   * GridAdapters.
   * 
   * @param childView
   *            the child view (present within CardViewHolder) which needs to
   *            receive click event.
   * @param clickEventId
   *            the integer identifier for this childView's click event, this
   *            Id should be a >= 0
   */
  public void registerChildViewForClickEvent(View childView, int clickEventId) {
    if (clickEventId < 0) {
      throw new IllegalArgumentException(
          "Event-Id should be a positive integer");
    }
    tagEventIdValueToView(childView, clickEventId);
    childView.setOnClickListener(onClickListener);
  }

  public static int getPositionFromViewTag(View view) {
    return getIntValueFromViewTag(view, TAG_VIEW_POSITION);
  }

  public static int getEventIdFromViewTag(View view) {
    return getIntValueFromViewTag(view, TAG_CLICK_EVENT_ID);
  }

  public static void tagPositionValueToView(View view, int value) {
    tagIntValueToView(view, TAG_VIEW_POSITION, value);
  }

  public static void tagEventIdValueToView(View view, int value) {
    tagIntValueToView(view, TAG_CLICK_EVENT_ID, value);
  }

  private static int getIntValueFromViewTag(View view, int key) {
    Object taggedValue;
    if (null != view && null != (taggedValue = view.getTag(key))
        && taggedValue instanceof Integer) {
      return (Integer) taggedValue;
    } else {
      return -1;
    }
  }

  private static void tagIntValueToView(View view, int key, int value) {
    if (null != view) {
      view.setTag(key, value);
    }
  }

}




Java Source Code List

com.birin.cursorgridadapter.base.BaseCursorGridActivity.java
com.birin.cursorgridadapter.base.BaseEmployeeCursorGridAdapter.java
com.birin.cursorgridadapter.datasetup.CursorRetainingFragment.java
com.birin.cursorgridadapter.datasetup.TestContentProviderSqlHelper.java
com.birin.cursorgridadapter.datasetup.TestContentProvider.java
com.birin.cursorgridadapter.demo1.FixedCursorItems.java
com.birin.cursorgridadapter.demo2.CardClickHandlingEmployeeCursorGridAdapter.java
com.birin.cursorgridadapter.demo2.CardClickHandlingFixedCursorItems.java
com.birin.cursorgridadapter.demo3.ChildAndCardClickHandlingEmployeeCursorGridAdapter.java
com.birin.cursorgridadapter.demo3.ChildAndCardClickHandlingFixedCursorItems.java
com.birin.cursorgridadapter.demo4.FixedCursorItemsRotationSupport.java
com.birin.cursorgridadapter.demo5.UnlimitedCursorItemsRotationSupportAutoLoadMore.java
com.birin.cursorgridadapter.demo6.UnlimitedCursorItemsRotationClickToLoadMore.java
com.birin.gridlistviewadapters.BaseGridAdapter.java
com.birin.gridlistviewadapters.Card.java
com.birin.gridlistviewadapters.CursorFilter.java
com.birin.gridlistviewadapters.CursorGridAdapter.java
com.birin.gridlistviewadapters.ListGridAdapter.java
com.birin.gridlistviewadapters.RowViewHolder.java
com.birin.gridlistviewadapters.dataholders.CardDataHolder.java
com.birin.gridlistviewadapters.dataholders.CardPositionInfo.java
com.birin.gridlistviewadapters.dataholders.RowDataHolder.java
com.birin.gridlistviewadapters.utils.ChildViewsClickHandler.java
com.birin.gridlistviewadapters.utils.GridDataStructure.java
com.birin.gridlistviewadapters.utils.MaxCardsInfo.java
com.birin.gridlistviewadapters.utils.OnLoadMoreRequestListener.java
com.birin.gridlistviewadapters.utils.PositionCalculator.java
com.birin.gridlistviewadapters.utils.ViewHolderPositionTagger.java
com.birin.gridlistviewadaptersdemo.BaseDemoMenuList.java
com.birin.gridlistviewadaptersdemo.CursorDataDemos.java
com.birin.gridlistviewadaptersdemo.JavaUtilListDataDemos.java
com.birin.gridlistviewadaptersdemo.ParentDemoMenuList.java
com.birin.gridlistviewadaptersdemo.common.CharacterDrawable.java
com.birin.gridlistviewadaptersdemo.common.Constants.java
com.birin.gridlistviewadaptersdemo.common.EmployeeCardViewHolder.java
com.birin.gridlistviewadaptersdemo.common.RandomInfoGenerator.java
com.birin.listgridadapter.base.BaseEmployeeListGridAdapter.java
com.birin.listgridadapter.base.BaseListGridActivity.java
com.birin.listgridadapter.datasetup.Employee.java
com.birin.listgridadapter.datasetup.RetainedDataFragment.java
com.birin.listgridadapter.demo1.SimplestListGridAdapterUsageDemoActivity.java
com.birin.listgridadapter.demo2.FixedListItems.java
com.birin.listgridadapter.demo3.CardClickHandlingEmployeeListGridAdapter.java
com.birin.listgridadapter.demo3.CardClickHandlingFixedListItems.java
com.birin.listgridadapter.demo4.ChildAndCardClickHandlingEmployeeListGridAdapter.java
com.birin.listgridadapter.demo4.ChildAndCardClickHandlingFixedListItems.java
com.birin.listgridadapter.demo5.FixedListItemsRotationSupport.java
com.birin.listgridadapter.demo6.UnlimitedListItemsRotationSupportAutoLoadMore.java
com.birin.listgridadapter.demo7.UnlimitedListItemsRotationSupportAutoLoadMoreMax100Items.java
com.birin.listgridadapter.demo8.UnlimitedListItemsRotationSupportClickToLoadMore.java