Android Open Source - EasyListViewAdapters Child Views Click Handler

From Project

Back to project page EasyListViewAdapters.


The source code is released under:

Apache License

If you think the Android project EasyListViewAdapters 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 ww .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
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * See the License for the specific language governing permissions and
 * limitations under the License.
package com.birin.easylistviewadapters.utils;

import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ListView;

import com.birin.easylistviewadapters.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 row position, when click event occurs this row position data & event
 * id is retrieved from view tag & passed to client in callback.
 * Whenever {@link getNewRow()} method is called ,a view holder is returned &
 * user registers few children of row 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 current row position if they were registered for click events so
 * that this position can be used to identify when click event happens.
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 row should register for these events for parent row
   * view click events use
   * {@link ListView#setOnItemClickListener(android.widget.AdapterView.OnItemClickListener)}
   * @param childView
   *            the child view (present within RowView) 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);

  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