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

com.marvinlabs.widget.floatinglabel.itemchooser.FloatingLabelItemChooser Maven / Gradle / Ivy

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

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;

/**
 * A widget to choose and hold an item
 * 

* Created by Vincent Mimoun-Prat @ MarvinLabs, 28/08/2014. */ public class FloatingLabelItemChooser extends FloatingLabelTextViewBase { private static final String SAVE_STATE_KEY_SELECTED_ITEM = "saveStateSelectedItem"; public interface OnWidgetEventListener { public void onShowItemChooser(FloatingLabelItemChooser source); } public interface OnItemChooserEventListener { public void onSelectionChanged(FloatingLabelItemChooser source, ItemT selectedItem); } /** * The selected items indices within the available items */ protected ItemT selectedItem; /** * 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 OnItemChooserEventListener itemChooserListener; // ============================================================================================= // Lifecycle // == public FloatingLabelItemChooser(Context context) { super(context); } public FloatingLabelItemChooser(Context context, AttributeSet attrs) { super(context, attrs); } public FloatingLabelItemChooser(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } // ============================================================================================= // Overridden methods // == @Override protected int getDefaultLayoutId() { return R.layout.flw_widget_floating_label_item_chooser; } @Override protected int getDefaultDrawableRightResId() { return R.drawable.ic_chooser; } @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 (selectedItem != null) { saveState.putParcelable(SAVE_STATE_KEY_SELECTED_ITEM, selectedItem); } } @Override protected void restoreAdditionalInstanceState(Bundle savedState) { selectedItem = savedState.getParcelable(SAVE_STATE_KEY_SELECTED_ITEM); } @Override protected void setInitialWidgetState() { if (selectedItem == null) { setLabelAnchored(true); getInputWidget().setText(""); } else { setLabelAnchored(false); getInputWidget().setText(getItemPrinter().print(getSelectedItem())); } } @Override protected LabelAnimator getDefaultLabelAnimator() { return new TextViewLabelAnimator(); } // ============================================================================================= // Item choosing // == /** * Set the item currently selected * * @param item The item selected by the user */ public void setSelectedItem(ItemT item) { selectedItem = item; onSelectedItemChanged(); } /** * Get the item currently selected * * @return The item selected by the user */ public ItemT getSelectedItem() { return selectedItem; } /** * Refreshes the widget state when the selection changes */ protected void onSelectedItemChanged() { if (selectedItem == null) { anchorLabel(); getInputWidget().setText(""); } else { getInputWidget().setText(getItemPrinter().print(selectedItem)); floatLabel(); } if (itemChooserListener != null) itemChooserListener.onSelectionChanged(this, selectedItem); } /** * Show the item picker */ protected void requestShowPicker() { if (widgetListener != null) widgetListener.onShowItemChooser(this); } // ============================================================================================= // Other methods // == public OnItemChooserEventListener getItemChooserListener() { return itemChooserListener; } public void setItemChooserListener(OnItemChooserEventListener itemChooserListener) { this.itemChooserListener = itemChooserListener; } 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