All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.marvinlabs.widget.floatinglabel.itempicker.FloatingLabelItemPicker Maven / Gradle / Ivy

The newest version!
package com.marvinlabs.widget.floatinglabel.itempicker;

import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;

import com.marvinlabs.widget.floatinglabel.FloatingLabelTextViewBase;
import com.marvinlabs.widget.floatinglabel.LabelAnimator;
import com.marvinlabs.widget.floatinglabel.R;
import com.marvinlabs.widget.floatinglabel.anim.TextViewLabelAnimator;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 * A widget to pick one or more items from a list
 * 

* Created by Vincent Mimoun-Prat @ MarvinLabs, 28/08/2014. */ public class FloatingLabelItemPicker extends FloatingLabelTextViewBase { private static final String SAVE_STATE_KEY_SELECTED_INDICES = "saveStateSelectedIndices"; public interface OnWidgetEventListener { public void onShowItemPickerDialog(FloatingLabelItemPicker source); } public interface OnItemPickerEventListener { public void onSelectionChanged(FloatingLabelItemPicker source, Collection selectedItems); } /** * The available items */ protected List availableItems; /** * The selected items indices within the available items */ protected int[] selectedIndices; /** * Something to turn our items into strings */ protected ItemPrinter itemPrinter; /** * The listener to notify when this widget has something to say */ protected OnWidgetEventListener widgetListener; /** * The listener to notify when the selection changes */ protected OnItemPickerEventListener itemPickerListener; // ============================================================================================= // Lifecycle // == public FloatingLabelItemPicker(Context context) { super(context); } public FloatingLabelItemPicker(Context context, AttributeSet attrs) { super(context, attrs); } public FloatingLabelItemPicker(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } // ============================================================================================= // Overridden methods // == @Override protected int getDefaultLayoutId() { return R.layout.flw_widget_floating_label_item_picker; } @Override protected int getDefaultDrawableRightResId() { return R.drawable.ic_picker; } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); getInputWidget().setClickable(true); getInputWidget().setOnClickListener(inputWidgetClickListener); } @Override protected void restoreInputWidgetState(Parcelable inputWidgetState) { getInputWidget().onRestoreInstanceState(inputWidgetState); } @Override protected Parcelable saveInputWidgetInstanceState() { return getInputWidget().onSaveInstanceState(); } @Override protected void putAdditionalInstanceState(Bundle saveState) { if (selectedIndices != null) { saveState.putIntArray(SAVE_STATE_KEY_SELECTED_INDICES, selectedIndices); } } @Override protected void restoreAdditionalInstanceState(Bundle savedState) { selectedIndices = savedState.getIntArray(SAVE_STATE_KEY_SELECTED_INDICES); // setSelectedIndices(selectedIndices); } @Override protected void setInitialWidgetState() { if (selectedIndices == null || selectedIndices.length == 0) { setLabelAnchored(true); getInputWidget().setText(""); } else { setLabelAnchored(false); getInputWidget().setText(getItemPrinter().printCollection(getSelectedItems())); } } @Override protected LabelAnimator getDefaultLabelAnimator() { return new TextViewLabelAnimator(); } // ============================================================================================= // Item picking // == /** * Sets the items that can be selected from this widget * * @param availableItems */ public void setAvailableItems(List availableItems) { this.availableItems = availableItems; } public List getAvailableItems() { return availableItems; } /** * Set the indices of the items currently selected * * @param indices The positions of the selected items within the available item list */ public void setSelectedIndices(int[] indices) { selectedIndices = indices; onSelectedItemsChanged(); } /** * Get the indices of the items currently selected * * @return an array of indices within the available items list */ public int[] getSelectedIndices() { return selectedIndices; } /** * Get the items currently selected * * @return */ public Collection getSelectedItems() { if (availableItems == null || selectedIndices == null || selectedIndices.length == 0) { return new ArrayList(0); } ArrayList items = new ArrayList(selectedIndices.length); for (int index : selectedIndices) { items.add(availableItems.get(index)); } return items; } /** * Refreshes the widget state when the selection changes */ protected void onSelectedItemsChanged() { final Collection selectedItems = getSelectedItems(); if (selectedItems.isEmpty()) { anchorLabel(); getInputWidget().setText(""); } else { getInputWidget().setText(getItemPrinter().printCollection(selectedItems)); floatLabel(); } if (itemPickerListener != null) itemPickerListener.onSelectionChanged(this, selectedItems); } /** * Show the item picker */ protected void requestShowPicker() { if (widgetListener != null) widgetListener.onShowItemPickerDialog(this); } // ============================================================================================= // Other methods // == public OnItemPickerEventListener getItemPickerListener() { return itemPickerListener; } public void setItemPickerListener(OnItemPickerEventListener itemPickerListener) { this.itemPickerListener = itemPickerListener; } public OnWidgetEventListener getWidgetListener() { return widgetListener; } public void setWidgetListener(OnWidgetEventListener widgetListener) { this.widgetListener = widgetListener; } public void setItemPrinter(ItemPrinter itemPrinter) { this.itemPrinter = itemPrinter; } public ItemPrinter getItemPrinter() { if (itemPrinter == null) { itemPrinter = new ItemPrinter.ToStringItemPrinter(); } return itemPrinter; } /** * Listen to click events on the input widget */ OnClickListener inputWidgetClickListener = new OnClickListener() { @Override public void onClick(View v) { requestShowPicker(); } }; }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy