Xamarin android spinner searchable
Hay solo un objeto con el que podemos trabajar
SpinnerCustomObject.SpinnerCustomObj
(Compatible API >= 23)
Código de ejemplo:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main">
<SpinnerCustomObject.SpinnerCustomObj
android:id="@+id/spiner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
</RelativeLayout>
SpinnerCustomObj
una vez declarado en xml(vista) se puede instanciar como cualquier otro componente android
Ejemplo:
public class Activity1 : AppCompatActivity
{
SpinnerCustomObject.SpinnerCustomObj SCOX;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
SCOX = FindViewById<SpinnerCustomObject.SpinnerCustomObj>(Resource.Id.spiner1);
}
}
Puede usar el método SetData
para agregar un List
del objeto que necesite mostrar en el spinner, como se muestra en el código a continuación:
Primero creare un objeto
using SpinnerCustomObject.AttributeCustom;
namespace Test
{
public class Testobj
{
[Texto] // Muy importante el atributo "Texto"
public string Dato1 { get; set; } // Esta propiedad se usara mostrar en el spinner
public string Dato2 { get; set; }
public string Dato3 { get; set; }
public string Dato4 { get; set; }
public string Dato5 { get; set; }
}
}
public class Activity1 : AppCompatActivity
{
SpinnerCustomObject.SpinnerCustomObj SCOX;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
List<Testobj> tt = new List<Testobj>();
tt.Add(new Testobj { Dato1 = "A", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
tt.Add(new Testobj { Dato1 = "B", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
tt.Add(new Testobj { Dato1 = "C", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
tt.Add(new Testobj { Dato1 = "D", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
tt.Add(new Testobj { Dato1 = "E", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
SCOX = FindViewById<SpinnerCustomObject.SpinnerCustomObj>(Resource.Id.spiner1);
SCOX.SetData(this.SupportFragmentManager, tt);
}
}
TextColorSpinner
Da color al texto mostrado en el spinner(por defecto negro)BackGroundColorSpinner
cambia el color de fondo del panel spinner(por defecto blanco).
Puede acceder al dato seleccionado en el spinner desde el evento GetDataEvent
que se ejecutara cuando se seleccione un item dentro del panel spinner o puede acceder al contenido en cualquier momento con la función GetDataClick
que retornara el dato tipo object
al cual se debe realizar una conversión a su objeto inicial
Hay tres objetos con los que podemos trabajar
SpinnerCustomObject.SpinnerCustomObjX
(compatible con proyectos androidx)SpinnerCustomObject.SpinnerCustomObjV4
(compatible con proyectos Android.Support.V4)SpinnerCustomObject.SpinnerCustomObjV7
(compatible con proyectos Android.app)
Código de ejemplo (compatible con proyectos androidx) :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main">
<SpinnerCustomObject.SpinnerCustomObjX
android:id="@+id/spiner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
</RelativeLayout>
SpinnerCustomObj
una vez declarado en xml(vista) se puede instanciar como cualquier otro componente android
Ejemplo:
public class Activity1 : AppCompatActivity
{
SpinnerCustomObject.SpinnerCustomObjX SCOX;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
SCOX = FindViewById<SpinnerCustomObject.SpinnerCustomObjX>(Resource.Id.spiner1);
}
}
Puede usar el método SetData
para agregar un List
del objeto que necesite mostrar en el spinner, como se muestra en el código a continuación:
Primero creare un objeto
using SpinnerCustomObject.AttributeCustom;
namespace Test
{
public class Testobj
{
[Texto] // Muy importante el atributo "Texto"
public string Dato1 { get; set; } // Esta propiedad se usara mostrar en el spinner
public string Dato2 { get; set; }
public string Dato3 { get; set; }
public string Dato4 { get; set; }
public string Dato5 { get; set; }
}
}
public class Activity1 : AppCompatActivity
{
SpinnerCustomObject.SpinnerCustomObjX SCOX;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
List<Testobj> tt = new List<Testobj>();
tt.Add(new Testobj { Dato1 = "A", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
tt.Add(new Testobj { Dato1 = "B", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
tt.Add(new Testobj { Dato1 = "C", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
tt.Add(new Testobj { Dato1 = "D", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
tt.Add(new Testobj { Dato1 = "E", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
SCOX = FindViewById<SpinnerCustomObject.SpinnerCustomObjX>(Resource.Id.spiner1);
SCOX.SetData(this.SupportFragmentManager, tt);
}
}
TextColorSpinner
Da color al texto mostrado en el spinner(por defecto negro)BackGroundColorSpinner
cambia el color de fondo del panel spinner(por defecto blanco).
Puede acceder al dato seleccionado en el spinner desde el evento GetDataEvent
que se ejecutara cuando se seleccione un item dentro del panel spinner o puede acceder al contenido en cualquier momento con la función GetDataClick
que retornara el dato tipo object
al cual se debe realizar una conversión a su objeto inicial
Xamarin android spinner searchable
Hay dos objetos con los que podemos trabajar
List<SpinnerObjectRandom> SOR = new List<SpinnerObjectRandom>();
SOR.Add(new SpinnerObjectRandom { Dato1 = "A", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
SOR.Add(new SpinnerObjectRandom { Dato1 = "B", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
SOR.Add(new SpinnerObjectRandom { Dato1 = "C", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
SOR.Add(new SpinnerObjectRandom { Dato1 = "D", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
SOR.Add(new SpinnerObjectRandom { Dato1 = "E", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
SpinnerCustomV7 Spinn01; // Compatible con Android.Support.V7
Spinn01 = new SpinnerCustomV7(SOR);
List<SpinnerObjectRandom> SOR = new List<SpinnerObjectRandom>();
SOR.Add(new SpinnerObjectRandom { Dato1 = "A", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
SOR.Add(new SpinnerObjectRandom { Dato1 = "B", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
SOR.Add(new SpinnerObjectRandom { Dato1 = "C", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
SOR.Add(new SpinnerObjectRandom { Dato1 = "D", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
SOR.Add(new SpinnerObjectRandom { Dato1 = "E", Dato2 = "DATA2", Dato3 = "DATA3", Dato4 = "DATA4", Dato5 = "DATA5" });
SpinnerCustomV4 Spinn01; // Compatible con Android.Support.V4
Spinn01 = new SpinnerCustomV7(SOR);
El objeto que toma como parámetro en el constructor puede ser cualquier tipo de objeto pero debe tener el attribute [Texto] en la propiedad que se quiere mostrar en el spinner
using SpinnerCustomObject.AttributeCustom;
//Ejemplo objeto random
public class SpinnerObjectRandom
{
[Texto]
public string Dato1 { get; set; } // Esta propiedad se usara mostrar en el spinner
public string Dato2 { get; set; }
public string Dato3 { get; set; }
public string Dato4 { get; set; }
public string Dato5 { get; set; }
}
SpinnerSearchableCustomObject devuelve el objeto completo después del click, pero en necesario una conversión.
Spinn01.EventClickSpinner += (s, e) =>
{
var Result = (SpinnerObjectRandom)e.SpinnerModel;
Text01.Text = Result.Dato1;
Spinn01.Dismiss();
};
Es necesario para la implementación utilizar un widget que permita levantar SpinnerSearchableCustomObject
TextView Text01 = FindViewById<TextView>(Resource.Id.TextView01);
Text01.Touch += Text01_Touch;
private void Text01_Touch(object sender, Android.Views.View.TouchEventArgs e)
{
try
{
if (e.Event.Action == Android.Views.MotionEventActions.Down)
{
if (!Spinn01.IsVisible)
{
Spinn01.Show(FragmentManager, "TestSpinner");
}
}
}
catch (Exception ex) { }
}