![]() |
|
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 |
«
Tema Anterior
|
Siguiente tema
»
|
Herramientas |
#1
|
||||
|
||||
Como llamar a MainActivity desde clase externa?
Buenos días, soy nuevo en este foro, por lo que he creado el tema donde creí más conveniente de acuerdo a la temática, si hay algo mal por favor avísenme para poder hacer algo al respecto, gracias.
![]() Bueno, al lio tengo un pequeño problema, que probablemente sean de estos súper absurdos que a veces surgen en programacion, pero que no he podido resolver. Verán estoy empezando en la programación en Android, y he llegado a una parte en la que necesito llamar a una función o método que tengo en la clase de MainActivity desde otra clase “normal”, el punto es que, de acuerdo a lo que he visto no puedo llamar directamente a MainActivity() ya que al heredar de Activity tiene una forma peculiar y especial de usar, por lo que no puedo llamarla con un objeto como cualquier otra clase, ya que al hacerlo se cierra directamente la aplicación. También de acuerdo a lo que he visto para llamar a un Activity se debe hacer con un objeto Intent, y luego con startActivity(), o startActivityForResult(), el tema es que creo que esto inicia de nuevo la actividad, y yo no quiero eso, solo quiero llamar a una de sus funciones ya que al ser la MainActivity() se crea desde el inicio. Aclarar que la llamada la hago desde una clase “normal” que no hereda de nadie, no es un servicio ni otra actividad (otra razón de por qué no usar Intent, ya que creo que solo lo puede hacer otra actividad, y además no tengo más Actividades en el proyecto ), esta clase en un principio es llamada por MainActivity(), y a partir de ahí se hacen una serie de cosas que terminan en una llamada hacia el mismo MainActivity() desde la clase externa(dentro del mismo paquete), algo así: MainActivity() --> Clase externa --> MainActivity() La razón de por qué lo hago así es porque en la clase externa tengo el código más importante “centralizado”, y en distintas partes de MainActivity() se hace referencia a esta clase (que puedo hacer sin ningún problema a partir de un objeto), pero al momento de realizar la segunda llamada hacia MainActivity() se cierra la aplicación(aun no entiendo muy bien por qué ![]() Otra razón de la segunda llamada es para hacer una tarea que solo la puede realizar un Activity, como cambiar un texto de un widget en un Layout o cosas así, y que debe suceder solo cuando se hace esta llamada a MainActivity(). Y no puedo hacer que al llamar una función de la clase externa regrese los datos con Return, por la forma en que está hecha (con varias funciones dentro de la clase externa), tampoco quiero meter otra Activity o un Servicio ya que las cosas que hace la clase externa no es nada del otro mundo ni nada especial, solo es para tener las cosas más organizadas y centralizadas, y si lo hiciera con otra Activity tendría que poner otro Layout, mientras que con el servicio se debe regresar información al completarse, en este caso el código de la clase no tiene ni necesita un Layout, y no regresa un valor de inmediato. Básicamente, considerando lo anterior, necesito alguna forma de llamar una función o método dentro de MainActivity() desde otra clase “normal”, o sino alguna forma de hacer que la clase externa pueda realizar tareas que normalmente solo puede un Activity como cambiar un texto, etc. Espero me puedan ayudar ya que he estado intentado muchas cosas sin éxito y he investigado pero no encuentro información respecto a lo que trato de hacer. ![]() Sí resulta que algo que dije está mal o no es como yo creo (que es muy probable), por favor díganmelo ya que, como dije, estoy empezando con Android y no encuentro la forma de hacer esto, además de que lo estoy viendo absurdamente complicado el llamar a una función de una de las principales clases del proyecto (que según yo debería ser sencillo de accesar a ella por su importancia), cualquier sugerencia o comentario por favor díganmela y perdóneme por ser tan manco en esto (que seguramente los que sepan se estarán riendo de lo sencillo que ha de ser… ![]() ![]() |
|
#2
|
||||
|
||||
He de reconocer que no me he leido todo el rollazo que has puesto, pero creo que he entendido lo que quieres hacer.
Estás en MainActivity, y llamas a un método en una clase (que llamaremos Externa) que llama a su vez a un método que está en MainActivity. Es decir, más o menos tienes esto: public class MainActivity extends Activity { .... .... .... Externa ext = new Externa(); ... ... ... ext.Metodo(); ... ... ... } Y Metodo() llama a un método presente en MainActivity, ¿es correcto? Pues si es así lo puedes resolver de muchas formas, pero una por ejemplo es poner a MainActivity como parámetro del constructor de Externa, es decir, tener esto: public Externa(MainActivity main) Así que cuando creas a Externa en MainActivity tendrás esto: Externa ext = new Externa(this); El resto ya es fácil. |
#3
|
||||
|
||||
Gracias kriogeN
![]() ![]() ------------------------clase: MainActivity------------------------ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); externa algo = new externa(this); algo.algomas(); } public void funcion() { //Mucho código.. } } ------------------------clase: externa------------------------ public class externa{ MainActivity main; public externa(MainActivity main) { this.main=main; } public void algomas() { main.funcion(); } } |
Respuesta |
![]() |
||||||
|
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 03:21:59 (GMT +2)
HTCMania: líderes desde el 2007