Foros del Web » Programando para Internet » Android »

¿Como modificar un textview desde otra clase?

Estas en el tema de ¿Como modificar un textview desde otra clase? en el foro de Android en Foros del Web. Estoy trabajando para un cliente una aplicacion en Android con Google Maps. Uno de los modulos, debera de mostrar un mapa, con un marker, al ...
  #1 (permalink)  
Antiguo 20/11/2012, 01:45
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Pregunta ¿Como modificar un textview desde otra clase?

Estoy trabajando para un cliente una aplicacion en Android con Google Maps.
Uno de los modulos, debera de mostrar un mapa, con un marker, al hacerle clic al marker, en la parte superior del mapa, debera de aparecer modificando unos campos(en este codigo que pondre, solo es un textview) el titulo e informacion extra.
Para manejar los eventos al hacer clic usare una clase que ya viene en varios tutoriales, MyItemizedOverlay , y otra clase donde se va a mostrar el mapa, mapatest:


-------------------------------------MAPATEST-------------------------------------

package com.func.app;

import java.util.List;

import com.func.app.R;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;


import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.EditText;
import android.widget.TextView;


public class mapatest extends MapActivity {
private MapView mapView;
public static List<Overlay> mapOverlays;
GeoPoint point,point2;
OverlayItem overlayitem,overlayitem1;
public TextView titulo;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mapa);
titulo=(TextView)findViewById(R.id.tituloanuncio);
//titulo.setText("a ver");
//comunica();
mapView = (MapView) findViewById(R.id.map_view);
//sets the zoom to see the location closer
mapView.getController().setZoom(12);

//this will let you to zoom in or out using the controllers
mapView.setBuiltInZoomControls(true);

List< Overlay > mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.googlei con);

MyItemizedOverlay itemizedoverlay = new MyItemizedOverlay(drawable, this);

GeoPoint point = new GeoPoint(46066940, 23570000);
//this will show you the map at the exact location you want (if you not set this you will see the map somewhere in America)
mapView.getController().setCenter(point);
OverlayItem overlayitem = new OverlayItem(point, "Title for dialog", "Alba Iulia City From Romania");

GeoPoint point2 = new GeoPoint(35410000, 139460000);
OverlayItem overlayitem2 = new OverlayItem(point2, "Title for dialog", "Japan");

itemizedoverlay.addOverlay(overlayitem);
itemizedoverlay.addOverlay(overlayitem2);
mapOverlays.add(itemizedoverlay);

}

@Override
protected boolean isRouteDisplayed() {
return false;
}

void comunica(){
this.titulo.setText("titulos");

System.out.println("Comunicando");
}


}
-------------------------------------------MyItemizedOverlay---------------------------------------

package com.func.app;

import android.content.Context;
import android.graphics.drawable.Drawable;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;

import java.util.ArrayList;

/**
* Description
*
* @author : kazy
* Date: 3/23/12
*/
public class MyItemizedOverlay extends ItemizedOverlay {
private ArrayList< OverlayItem > mOverlays = new ArrayList< OverlayItem >();
Context mContext;



public MyItemizedOverlay(Drawable marker) {
super(boundCenterBottom(marker));
}

public MyItemizedOverlay(Drawable marker, Context context) {
super(boundCenterBottom(marker));
mContext = context;
}

public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}

@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}

@Override
public int size() {
return mOverlays.size();
}

@Override
protected boolean onTap(int i) {
mapatest ob=new mapatest();//Prueba nivel noob
ob.comunica();//Pruebas nivel noob
return true;
}
}

------------------------------------------------------------------------------------
Lo que yo tenia pensado era crear un metodo en mapatest comunica(como viene en el codigo),donde en ese codigo se modifica por settext, y en el metodo onTap de MyItemizedOverlay llamarlo para que al hacer clic se muestre la informacion en un textview, para probar hice un objeto de la clase mapatest y lo ejecute en onTap, obviamente no funciona, por lo que vengo aca con la duda ¿como puedo modificar desde onTap el textview de mapatest? Pense en esa solucion, pero si no es en onTap, corrijanme por favor,les agradezco a todos por leer el mensaje..
Saludos
  #2 (permalink)  
Antiguo 21/11/2012, 05:52
 
Fecha de Ingreso: enero-2002
Mensajes: 132
Antigüedad: 22 años, 3 meses
Puntos: 1
Respuesta: ¿Como modificar un textview desde otra clase?

Yo también estoy interesado, mi problema está relacionado con esto mismo. Lo he intentado con el context, el intent, el view. Nada no hay forma, sin embargo si puedo acceder a las variables/propiedades de otra clase sin ningún problema; incluso a los métodos. Pero si lanzo un método de clase que contiene el view desde la otra clase externa, esta no modifica el textview. :S
A ver si algún alma caritativa nos echa ayudita.
__________________
Un saludo, esperando ser de ayuda...
COMUN :stress:

Diseño y Programación
Tierra de Califas
http://www.tecnocodigo.com/dipro/
  #3 (permalink)  
Antiguo 22/11/2012, 00:27
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: ¿Como modificar un textview desde otra clase?

=/ esperemos si haya alguien, ya he posteado esta duda en varios foros, y no me saben ayudar, igual a lo mejor lo estoy aplicando mal para la solucion que quiero dar, esperemos si nos ayude alguien
  #4 (permalink)  
Antiguo 24/11/2012, 19:17
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: ¿Como modificar un textview desde otra clase?

Creo que encontre una solucion, a ver tu que opinas comun.

En la clase A , el textview lo puse statico en la declaracion global de la misma clase, y cree un metodo que retorna el textview :

public TextView retornartext()
{
return this.titulo;
}


En la Clase B , cree un objeto de la clase A y llame al textview para modificaro :

mapatest ob=new mapatest();
TextView tv = ob.retornartext();
tv.setText("Probar cambio");

Me ha funcionado, mas no se si sea conveniente crearlo de manera static el textview, ¿tendra repercusiones en el rendimiento?. Por lo pronto esta solucion me ha ayudado a avanzar en el proyecto.
  #5 (permalink)  
Antiguo 27/11/2012, 09:48
 
Fecha de Ingreso: enero-2011
Ubicación: Málaga
Mensajes: 9
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: ¿Como modificar un textview desde otra clase?

Mirad a ver si os sirve esto:
http://android-er.blogspot.com.es/2012/06/communication-between-fragments-in.html
  #6 (permalink)  
Antiguo 17/12/2012, 04:41
 
Fecha de Ingreso: enero-2002
Mensajes: 132
Antigüedad: 22 años, 3 meses
Puntos: 1
Respuesta: ¿Como modificar un textview desde otra clase?

Ozu que mareo de código. jejejeeje. El método de Fsg funciona y es sencillo de implementar, desconozco la repercusión en el rendimiento; pero no creo que sea tanto como para que se note diferencia alguna.

En cuanto a la web que ha posteado el compañero Snatch estoy examinándola, porque la verdad tiene cosas interesantes, pero mucho código. Lo voy a imprimir todo y a analizarlo con detenimiento.

Gracias. :) y Feliz programeo.
__________________
Un saludo, esperando ser de ayuda...
COMUN :stress:

Diseño y Programación
Tierra de Califas
http://www.tecnocodigo.com/dipro/

Etiquetas: activity, java, modificar, textview, todo, apps, aplicaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:28.