PDA

Ver la Versión Completa : Ayuda Control Spinner


charmedever
19/11/12, 02:25:52
Hola q tal amigos espero puedan ayudarme sucede que quiero llenar los elementos de un Spinner mediante un Edit Text cada vez q agregue una cadena en el EditText ese valor sea pasado o visualizado al Spinner.
Espero puedan ayudarme y orientame si esto puede ser posible de realizar.
Por su comprension
Gracias

Celtium
20/11/12, 21:21:04
Hola, que tal?

Primero crea los siguiente en el layout correspondiente. Yo hice una que tiene un EditText, un boton y un spiner.

<Spinner
android:id="@+id/spinner_datos"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
/>

<EditText
android:id="@+id/et_insert_datos"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:ems="10"
android:text=""
/>

FIJATE QUE EL VALOR QUE LE ASIGNAMOS AL TEXTO DEL EDITTEXT ES "",

<Button
android:id="@+id/bt_insertar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/et_insert_datos"
android:layout_centerHorizontal="true"
android:text="Insertar"
/>

El la activity tendras que poner dentro del oncreate:


IDENTIFICAR LOS VIEWS
final EditText et_insertar = (EditText) findViewById(R.id.et_insert_datos);
final Button bt_insetar = (Button) findViewById(R.id.bt_insertar);
Spinner spinner = (Spinner) findViewById(R.id.spinner_datos);

SABEMOS QUE PODEMOS METER LOS DATOS EN EL SPINNER CON UN ARRAY, PUES CREAMOS UN ARRAYLIST
final ArrayList<String> array_datos = new ArrayList<String>();

LO FORMATEAMOS EN UN ADAPTER
ArrayAdapter<String> array_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, array_datos);

Y LO INSERTAMOS EN EL SPINNER
spinner.setAdapter(array_adapter);


UNA VEZ INICIES LA APP AL PRESIONAR EL BOTON HARA LO QUE SIGUE:

bt_insetar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {

TOMA EL TEXTO QUE HAYA EN EL EDITtEXT Y LO GUARDA EN EL STRING VALOR.
String valor = et_insertar.getText().toString();

AHORA HACEMOS UNA COMPROBACIÓN, SI EL VALOR TIENE MAS DE 0 LETRAS
if (valor.length()>0){
SI HAY ALGUN DATO LO INSERTAMOS EN LA ULTIMA POSICION DEL ARRAY
array_datos.add(valor);
ASIGNAMOS AL EDITTEXT EL VALOR INCIAL ES DECIR ""
et_insertar.setText("");

AHORA HACEMOS QUE DESAPAREZCA EL TECLADO, QUEDA MAS BONITO Y SE HACE SOLO SI EL TEXTO ES VALIDO
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT _METHOD_SERVICE);
imm.hideSoftInputFromWindow(et_insertar.getWindowT oken(), 0);

}
}
});


Espero que te ayude.

Suerte ;)

charmedever
21/11/12, 05:43:56
Hola q tal amigo implemente el codigo q me proporcionaste pero me marca un error en la linea de array_datos.add(valor);
Copie el codigo como le lo pasaste y fui analizando cada linea no se si me falto algo que agregar. Anexo el codigo para q lo revises

package com.control.spinner;
import java.util.ArrayList;
import android.app.Activity;
import android.content.*;
import android.content.DialogInterface.*;
import android.os.Bundle;
import android.view.*;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.*;

public class Agregar extends Activity
{
public EditText et_insertr_datos;
public Button bt_insertar;
public Spinner spinner_datos;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spinner);
et_insertr_datos = (EditText) findViewById(R.id.et_insert_datos);
bt_insertar = (Button) findViewById(R.id.bt_insertar);
Spinner spinner = (Spinner) findViewById(R.id.spinner_datos);
ArrayList<String> array_datos = new ArrayList<String>();
ArrayAdapter<String> array_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, array_datos);
spinner.setAdapter(array_adapter);
bt_insertar.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
//TOMA EL TEXTO QUE HAYA EN EL EDITtEXT Y LO GUARDA EN EL STRING VALOR.
String valor = et_insertr_datos.getText().toString();
//AHORA HACEMOS UNA COMPROBACIÓN, SI EL VALOR TIENE MAS DE 0 LETRAS
if (valor.length()>0)
{
//SI HAY ALGUN DATO LO INSERTAMOS EN LA ULTIMA POSICION DEL ARRAY
array_datos.add(valor);
//ASIGNAMOS AL EDITTEXT EL VALOR INCIAL ES DECIR ""
et_insertr_datos.setText("");
//AHORA HACEMOS QUE DESAPAREZCA EL TECLADO, QUEDA MAS BONITO Y SE HACE SOLO SI EL TEXTO ES VALIDO
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT _METHOD_SERVICE);
imm.hideSoftInputFromWindow(et_insertr_datos.getWi ndowToken(), 0);
}
}
});
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.activity_spinner, menu);
return true;
}
}

Tambien anexo archivo xml

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/AbsoluteLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<EditText
android:id="@+id/et_insert_datos"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_x="8dp"
android:layout_y="63dp"
android:ems="10" />


<Button
android:id="@+id/bt_insertar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="121dp"
android:layout_y="138dp"
android:onClick="Insertar"
android:text="Insertar" />

<Spinner
android:id="@+id/spinner_datos"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="115dp"
android:layout_y="232dp" />

</AbsoluteLayout>

Espero puedas ayudarme
Disculpa las molestias
;-)

sgsbarna
21/11/12, 10:21:45
Hola q tal amigo implemente el codigo q me proporcionaste pero me marca un error en la linea de array_datos.add(valor);
Copie el codigo como le lo pasaste y fui analizando cada linea no se si me falto algo que agregar. Anexo el codigo para q lo revises

package com.control.spinner;
import java.util.ArrayList;
import android.app.Activity;
import android.content.*;
import android.content.DialogInterface.*;
import android.os.Bundle;
import android.view.*;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.*;

public class Agregar extends Activity
{
public EditText et_insertr_datos;
public Button bt_insertar;
public Spinner spinner_datos;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spinner);
et_insertr_datos = (EditText) findViewById(R.id.et_insert_datos);
bt_insertar = (Button) findViewById(R.id.bt_insertar);
Spinner spinner = (Spinner) findViewById(R.id.spinner_datos);
ArrayList<String> array_datos = new ArrayList<String>();
ArrayAdapter<String> array_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, array_datos);
spinner.setAdapter(array_adapter);
bt_insertar.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
//TOMA EL TEXTO QUE HAYA EN EL EDITtEXT Y LO GUARDA EN EL STRING VALOR.
String valor = et_insertr_datos.getText().toString();
//AHORA HACEMOS UNA COMPROBACIÓN, SI EL VALOR TIENE MAS DE 0 LETRAS
if (valor.length()>0)
{
//SI HAY ALGUN DATO LO INSERTAMOS EN LA ULTIMA POSICION DEL ARRAY
array_datos.add(valor);
//ASIGNAMOS AL EDITTEXT EL VALOR INCIAL ES DECIR ""
et_insertr_datos.setText("");
//AHORA HACEMOS QUE DESAPAREZCA EL TECLADO, QUEDA MAS BONITO Y SE HACE SOLO SI EL TEXTO ES VALIDO
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT _METHOD_SERVICE);
imm.hideSoftInputFromWindow(et_insertr_datos.getWi ndowToken(), 0);
}
}
});
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.activity_spinner, menu);
return true;
}
}

Tambien anexo archivo xml

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/AbsoluteLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<EditText
android:id="@+id/et_insert_datos"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_x="8dp"
android:layout_y="63dp"
android:ems="10" />


<Button
android:id="@+id/bt_insertar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="121dp"
android:layout_y="138dp"
android:onClick="Insertar"
android:text="Insertar" />

<Spinner
android:id="@+id/spinner_datos"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="115dp"
android:layout_y="232dp" />

</AbsoluteLayout>

Espero puedas ayudarme
Disculpa las molestias
;-)

Creo que te falta en el EdiText el android:text="".... puede ser?

Enviado desde mi GT-I9000 usando Tapatalk 2

Celtium
21/11/12, 15:24:45
Estoy en el móvil y no veo todo el código pero creo que declaras mal el arraylist , si lo haces así tendrás que declararlo antes del oncreate o marcarlo como final.

Lo de asignarle un valor inicial como "" al edittext es evitar líos, se que de serie viene con ese valor y me ahorro comprobar valores cuando trabajo con el edittext.

kriogeN
21/11/12, 16:13:20
Estoy en el móvil y no veo todo el código pero creo que declaras mal el arraylist , si lo haces así tendrás que declararlo antes del oncreate o marcarlo como final.

Lo de asignarle un valor inicial como "" al edittext es evitar líos, se que de serie viene con ese valor y me ahorro comprobar valores cuando trabajo con el edittext.

Efectivamente como dice Celtium esa variable tiene que ser Final, o bien declararla en un ámbito Global. Pero si la declaras dentro del onCreate sin Final el onClickListener no tendrá acceso a ella.

charmedever
21/11/12, 23:10:55
Muchas gracias por sus comentarios ahora mismo lo corregire :-)

charmedever
23/11/12, 23:52:22
Hola amigos corregi las observaciones q me hicieron en el codigo pero sucede q cuando quiero lanzar la aplicacion en el emulador me sale el mensaje de cerrado forzozo.

Espero puedan ayudarme a saber la razon de esto

Gracias por su atencion

Celtium
24/11/12, 14:44:09
pon todo tu codigo. toda la activity para ver que estas haciendo.

,)

charmedever
25/11/12, 01:43:54
Ok Amigo anexo el codigo espero sus comentarios

Codigo Layout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<EditText
android:id="@+id/et_insert_datos"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:ems="10"
android:text=""
/>


<Button
android:id="@+id/bt_insertar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/et_insert_datos"
android:layout_centerHorizontal="true"
android:text="Insertar"
/>

<Spinner
android:id="@+id/spinner_datos"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/bt_insertar"
android:layout_centerHorizontal="true"
android:layout_marginTop="52dp" />

</RelativeLayout>



Codigo Archivo java

package com.control.spinner;
import java.util.ArrayList;
import android.app.Activity;
import android.content.*;
import android.content.DialogInterface.*;
import android.os.Bundle;
import android.view.*;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.*;

public class Agregar extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spinner);
final EditText et_insertar_datos = (EditText) findViewById(R.id.et_insert_datos);
final Button bt_insertar = (Button) findViewById(R.id.bt_insertar);
Spinner spinner = (Spinner) findViewById(R.id.spinner_datos);
final ArrayList<String> array_datos = new ArrayList<String>();
ArrayAdapter<String> array_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, array_datos);
spinner.setAdapter(array_adapter);
bt_insertar.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
//TOMA EL TEXTO QUE HAYA EN EL EDITtEXT Y LO GUARDA EN EL STRING VALOR.
String valor = et_insertar_datos.getText().toString();
//AHORA HACEMOS UNA COMPROBACIÓN, SI EL VALOR TIENE MAS DE 0 LETRAS
if (valor.length()>0)
{
//SI HAY ALGUN DATO LO INSERTAMOS EN LA ULTIMA POSICION DEL ARRAY
array_datos.add(valor);
//ASIGNAMOS AL EDITTEXT EL VALOR INCIAL ES DECIR ""
et_insertar_datos.setText("");
//AHORA HACEMOS QUE DESAPAREZCA EL TECLADO, QUEDA MAS BONITO Y SE HACE SOLO SI EL TEXTO ES VALIDO
//InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT _METHOD_SERVICE);
//imm.hideSoftInputFromWindow(et_insertar_datos.getW indowToken(), 0);
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.activity_spinner, menu);
return true;
}
}



Gracias por su atencion
Que tengan buen dia!!

Celtium
25/11/12, 02:45:37
bueno, pues no encuentro por que te falla. El codigo esta bien, a mi me funciona bien en un movil.

Mira a ver si la versión del emulador no es muy baja, haz un equipo por lo menos con la versión 2.3.3 de Android. Aunque te debía funcionar en cualquier versión... (creo)

Create otro dispositivo virtual y ejecuta el código sobre ese nuevo.

A ver si hay suerte.

:(

charmedever
25/11/12, 04:56:19
Gracias por tu respuesta
Realice lo q me pediste y corrio correctamente la aplicacion
Muchas gracias!!