PDA

Ver la Versión Completa : Problema al pasar datos entre actividades


mascamasca
01/12/12, 00:48:48
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.


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,contacto s);
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(mMessageClickedHan dler);
BBDD.close();

}
public void pasar( int cual){
Intent pos=new Intent(this,detalle.class);
pos.putExtra("cual",cual);
startActivity(pos);
}
}

y aqui es donde supuestamente muestra los dato del contacto con la posicion que nos pasa de la anterior actividad.

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();
}
}
Muchas gracias por todo.

kriogeN
01/12/12, 09:28:17
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.

mascamasca
01/12/12, 11:10:09
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.


Intent cual=getIntent();
i=cual.getIntExtra("position",0);

en el getIntExtra("xxxx",x) el primer valor es la variable que traigo de la anterior actividad pero y en el segundo, porque dependiendo del valor que ponga ahí cuando le digo al cursor que vaya a la posicion que me da la variable.

kriogeN
01/12/12, 11:31:02
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.

mascamasca
01/12/12, 12:56:54
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.

mascamasca
01/12/12, 13:58:18
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.

Bundle cual = getIntent().getExtras();
i= cual.getInt("position");

// en vez de ésta
Intent cual=getIntent();
i=cual.getIntExtra("position",0);


Muchas garcias por la ayuda.
Un saludo.

kriogeN
01/12/12, 16:04:07
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.

mascamasca
02/12/12, 13:14:42
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.

superroko2
02/12/12, 23:15:23
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.

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.

mascamasca
10/12/12, 20:06:11
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.

Tines razón, lo mejor es hacerlo paso a paso.