|
||
|
|
|
|||||||
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
|
Herramientas |
|
#1
|
||||
|
||||
|
Problema al pasar datos entre actividades
Primeramente saludar a todos puesto que es miprimera vez en este foro.
Bueno os explico el problema. Tengo una actividad con un listview y un adaptador, y cuando se pulsa en uno de elementos de la lista debe pasar a otra actividad en la que nos muestra todos los datos de ese contacto. os pongo el codigo para que me digais que puede estar mal. Código:
public class lista extends Activity {
private bbdd BBDD;
private int posBBDD=0;
private Cursor dataBBDD;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.lista);
BBDD=new bbdd(this);
ArrayList<String> contactos = new ArrayList <String>();
dataBBDD= BBDD.getReadableDatabase().rawQuery("SELECT nombre FROM "+bbdd.BBDD_TABLA_datos,null);
if(dataBBDD.moveToFirst()){
do{
contactos.add(dataBBDD.getString(0));
}while(dataBBDD.moveToNext());
}
ListView listaCon=(ListView) findViewById(R.id.lstLista);
ArrayAdapter<String> adaptor=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,contactos);
listaCon.setAdapter(adaptor);
OnItemClickListener mMessageClickedHandler=new OnItemClickListener(){
@SuppressWarnings("rawtypes")
public void onItemClick(AdapterView parent, View v, int position,long id){
pasar(position);
//Toast.makeText(getApplicationContext(), "Click en el nombre "+position.toString(), Toast.LENGTH_SHORT).show();
}//fin void onitem
};//fin onitemclicklistener
listaCon.setOnItemClickListener(mMessageClickedHandler);
BBDD.close();
}
public void pasar( int cual){
Intent pos=new Intent(this,detalle.class);
pos.putExtra("cual",cual);
startActivity(pos);
}
}
Código:
public class detalle extends Activity {
private bbdd BBDD;
private int posBBDD=0;
private Cursor dataBBDD;
private TextView nombre;
private TextView ap1;
private TextView ap2;
private TextView cal;
private TextView num;
private TextView pis;
private TextView let;
int i;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.detalle);
BBDD=new bbdd(this);
Intent cual=getIntent();
i=cual.getIntExtra("position",0);
dataBBDD= BBDD.getReadableDatabase().rawQuery("SELECT * FROM "+bbdd.BBDD_TABLA_datos,null);
nombre=(TextView)this.findViewById(R.id.nom);
ap1=(TextView)this.findViewById(R.id.ape1);
ap2=(TextView)this.findViewById(R.id.ap2);
cal=(TextView)this.findViewById(R.id.via);
num=(TextView)this.findViewById(R.id.num);
pis=(TextView)this.findViewById(R.id.piso);
let=(TextView)this.findViewById(R.id.puerta);
if(dataBBDD.moveToFirst()){
nombre.setText(dataBBDD.getString(1));
ap1.setText(dataBBDD.getString(2));
ap2.setText(dataBBDD.getString(3));
cal.setText(dataBBDD.getString(5));
num.setText(dataBBDD.getString(6));
pis.setText(dataBBDD.getString(7));
let.setText(i);
//let.setText(dataBBDD.getString(8));
}
BBDD.close();
}
}
|
|
|
|
#2
|
||||
|
||||
|
En el putExtra al parámetro lo llamas "cual", y en el getIntExtra tratas de recogerlo como "position".
Así de entrada y sin mirar nada más, eso está mal. Los 2 deben llamarse igual. |
| Gracias de parte de: | ||
|
#3
|
||||
|
||||
|
Muchas gracias.
La verdad es que después detoda la tarde y a las horas que eran es normal, jajja. Pero el problema lo tengo cuando recojo el valor en la segunda actividad. Código:
Intent cual=getIntent();
i=cual.getIntExtra("position",0);
|
|
#4
|
||||
|
||||
|
Es el valor por defecto si la variable que pasas como parámetro no existe. En este caso si "position" no existe el valor de i siempre será 0.
Se usa para cuando quieres dar valores por defecto a una Activity sin tener que pasarle parámetros, por ejemplo por si quieres llamarla desde el propio Launcher. |
| Gracias de parte de: | ||
|
#5
|
||||
|
||||
|
Ya lo entiendo pero el problema es que supuestamente si debe coger el valor de position del onclick listener, porque si le hago un toast si lo muestra pero no lo envía a la siguiente actividad.
|
|
#6
|
||||
|
||||
|
Ya está solucionado.
Era que las variables las ponía mal como me dijiste y que a la hora de recuperarla con la opción que tenía puesto no funcionaba bien y usé ésta. Código:
Bundle cual = getIntent().getExtras();
i= cual.getInt("position");
// en vez de ésta
Intent cual=getIntent();
i=cual.getIntExtra("position",0);
Un saludo. |
|
#7
|
||||
|
||||
|
Pues no lo entiendo, debería funcionar de las 2 formas.
getIntExtra lo que hace internamente es convocar al "getExtras().getInt". Por eso uno se hace sobre el Intent y el otro directamente sobre el Bundle. |
| Gracias de parte de: | ||
|
#8
|
||||
|
||||
|
Eso también me extrañaba a mí pero ha funcionado, y si algo he aprendido en la programación es que cuando algo funciona es mejor no tocarlo, jejejeje
Un saludo y de verdad muchas gracias por la ayuda. |
|
#9
|
||||
|
||||
|
Pero bueno, como en C por ejemplo tampoco te dejan declarar variables dentro de bucles (por ejemplo: for (int i = 0; i < 24; ++i) ). Pues al final me he acostumbrado a hacerlo todo paso a paso, por novato, pesado, largo, o lo que sea que parezca, vale más asegurar. |
| Gracias de parte de: | ||
|
#10
|
||||
|
||||
|
Me pasó algo parecido hace tiempo, tampoco llegue a comprender jamás porque no funcionaba si en realidad es lo mismo hacerlo junto que separado.
Pero bueno, como en C por ejemplo tampoco te dejan declarar variables dentro de bucles (por ejemplo: for (int i = 0; i < 24; ++i) ). Pues al final me he acostumbrado a hacerlo todo paso a paso, por novato, pesado, largo, o lo que sea que parezca, vale más asegurar. ![]() |
![]() |
Estás aquí
|
||||||
|
||||||