Вы находитесь на странице: 1из 9

Personalizar un Spinner Android Studio 2019

Para personalizar el spinner, primero se ha de planificar es la información que va a llevar el spinner


y se crea una clase llamada Datos, la variable que se va a ingresar son 3, un nombre, un apellido, la
edad y una imagen.

Primero se crea un paquete donde irán los datos especiales (Para mantener el orden)
public class Datos {

private String Nombre, apellido;


private int edad;
private int foto;

public Datos(String nombre, String apellido, int edad, int foto) {


Nombre = nombre;
this.apellido = apellido;
this.edad = edad;
this.foto=foto;
}

public int getFoto() {


return foto;
}

public void setFoto(int foto) {


this.foto = foto;
}

public String getNombre() {


return Nombre;
}

public void setNombre(String nombre) {


Nombre = nombre;
}

public String getApellido() {


return apellido;
}

public void setApellido(String apellido) {


this.apellido = apellido;
}

public int getEdad() {


return edad;
}

public void setEdad(int edad) {


this.edad = edad;
}

Después se coloca el spinner donde se desea. Junto con los Edittext donde se editara la
información, un spinner para la edad y un botón para ingresar la información.

Ahora se edita el contenido de del spinner en un nuevo layout.

Le colocamos los textos y el ImageView.


Ahora se crea un paquete donde se colocara la case AdaptadorSpinnerCustom, lo expandimos
como un BaseAdapter y lo extendemos a un SpinnerAdapter.

Dentro de la clase se implementan las funciones obligatorias se crea un arraysList de Datos, y una
clase privada donde se tengan los 3 EditText y el ImageView. A continuación se explica que hace
cada función y se implementa la clase SPproyectoHolder que sirve para organizar los datos.

public class AdaptadorSpinnerCustom extends BaseAdapter implements


SpinnerAdapter {
private ArrayList<Datos> datos;

private Context context;

public AdaptadorSpinnerCustom(Context context) {


this.context = context;
}

@Override
public int getCount() {
//tamaño del array
return datos.size();
}

@Override
public Object getItem(int position) {
//devuelve el Objeto (lo usan la funcion getview getDropDownView)
return datos.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{

//Esta funcion carga al objeto por prinmera vez

// se crea una View, se crea un objeto y se devuelve la View


//asociamos la View
View view=View.inflate(getContext(),
R.layout.contenido_spinner_layout,null);
//se crea el viewholder para sociarlo a la view
SPproyectoHolder objeto=new SPproyectoHolder();
//se asignan los objetos al holder y se enlaza la informacion

objeto.setIvFoto((ImageView) view.findViewById(R.id.ivFoto) );
objeto.setTvNombre((TextView)view.findViewById(R.id.tvNombre));

objeto.setTvApellido((TextView)view.findViewById(R.id.tvApellido));
objeto.setTvEdad((TextView)view.findViewById(R.id.tvEdad));

//se carga la informacion en la View


objeto.getIvFoto().setImageBitmap(
datos.get(position).getFoto());
objeto.getTvNombre().setText( datos.get(position).getNombre());
objeto.getTvApellido().setText(
datos.get(position).getNombre());
objeto.getTvEdad().setText( datos.get(position).getNombre());

// devolvemos las View


return view;
}

@Override
public View getDropDownView(int position, View convertView, ViewGroup
parent) {

//Esta funcion carga al objeto por Segunda vez y actualizar

// se crea una View, se crea un objeto y se devuelve la View


//asociamos la View
View view=View.inflate(getContext(),
R.layout.contenido_spinner_layout,null);
//se crea el viewholder para sociarlo a la view
final SPproyectoHolder objeto=new SPproyectoHolder();
//se asignan los objetos al holder y se enlaza la informacion

objeto.setIvFoto((ImageView) view.findViewById(R.id.ivFoto) );
objeto.setTvNombre((TextView)view.findViewById(R.id.tvNombre));

objeto.setTvApellido((TextView)view.findViewById(R.id.tvApellido));
objeto.setTvEdad((TextView)view.findViewById(R.id.tvEdad));

//se carga la informacion en la View

objeto.getTvNombre().setText( datos.get(position).getNombre());
objeto.getTvApellido().setText(
datos.get(position).getNombre());
objeto.getTvEdad().setText( datos.get(position).getNombre());

// devolvemos las View


return view;
}

public ArrayList<Datos> getDatos() {


return datos;
}

public void setDatos(ArrayList<Datos> datos) {


this.datos = datos;
}

public Context getContext() {


return context;
}

public void setContext(Context context) {


this.context = context;
}

private static class SPproyectoHolder{


private ImageView ivFoto;
private TextView tvNombre,tvApellido,tvEdad;

public ImageView getIvFoto() {


return ivFoto;
}
public void setIvFoto(ImageView ivFoto) {
this.ivFoto = ivFoto;
}

public TextView getTvNombre() {


return tvNombre;
}

public void setTvNombre(TextView tvNombre) {


this.tvNombre = tvNombre;
}

public TextView getTvApellido() {


return tvApellido;
}

public void setTvApellido(TextView tvApellido) {


this.tvApellido = tvApellido;
}

public TextView getTvEdad() {


return tvEdad;
}

public void setTvEdad(TextView tvEdad) {


this.tvEdad = tvEdad;
}
}
}

ahora solo es asignar el adaptador y el arrayslist de datos al Spinner, por motivos didácticos, las
operaciones en el Spinner se harán dentro de la función códigoSpinner.

public class MainActivity extends AppCompatActivity {

private Spinner spinnerDatos;


private Spinner spEdad;
private ArrayList<Datos> datos;
private Button btnIngresar;
private EditText etNombre, etApellido;
private AdaptadorSpinnerCustom adaptador;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
codigoSpinner();
codigoRestoComponentes();
}
private void codigoSpinner() {

//inicializacion del spinner


spinnerDatos=(Spinner) findViewById(R.id.spDatos);
datos=new ArrayList<>();
adaptador=new AdaptadorSpinnerCustom(this);
adaptador.setDatos(datos);
spinnerDatos.setAdapter(adaptador);
}

private void codigoRestoComponentes() {


etNombre= (EditText) findViewById(R.id.etNombre);
etApellido= (EditText) findViewById(R.id.etNombre);

spEdad=(Spinner) findViewById(R.id.spEdad);

btnIngresar=(Button) findViewById(R.id.btnIngresar);

//Agregando datos al spiiner de la edad


ArrayList<String> numeros=new ArrayList<>();
for(int cont=0; cont<=50; cont ++){
numeros.add(String.valueOf(cont+18));

}
//Agregandole un adaptador Generico al Spinner
ArrayAdapter adaptadorsimple=new ArrayAdapter<String>(this,

android.R.layout.simple_spinner_dropdown_item,numeros.toArray(new
String[0]));
spEdad.setAdapter(adaptadorsimple);

//Agregar la informacion al spinner y actualizar


btnIngresar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//se agrega el item al ArraysList del para ingresarlo al
spinner y listo se actualiza el adaptador.
BitmapFactory.Options bmOptions = new

datos.add(new
Datos(etNombre.getText().toString(),etApellido.getText().toString(),
Integer.valueOf((String)
spEdad.getSelectedItem()),R.mipmap.diagramascala));
//actualizar el adaptador

adaptador.notifyDataSetChanged();
}
});

public Spinner getSpinnerDatos() {


return spinnerDatos;
}

public void setSpinnerDatos(Spinner spinnerDatos) {


this.spinnerDatos = spinnerDatos;
}
}

como se observa en las líneas de código anterior, su implementación es sencilla,.

Listo, aquí les dejo el link del proyecto en MEGA


http://evassmat.com/QCzjU

Вам также может понравиться