Forum Pplware
Programar classes em android - Versão de Impressão

+- Forum Pplware (http://forum.pplware.com)
+-- Fórum: Mais Tech (/forumdisplay.php?fid=11)
+--- Fórum: Programação e Web (/forumdisplay.php?fid=16)
+--- Tópico: Programar classes em android (/showthread.php?tid=11352)

Páginas: 1 2


Programar classes em android - djpinto - 14-04-2012 17:51

Boas tardes!
Estou a fazer uns pequenos testes em android e estou com um pequeno problema. Tenho que usar classes na minha aplicação e tenho criada uma segunda classe na qual esta um metodo para iniciar a aplicação (chama o layout principal), este vai ser mandado executar na primeira classe mas ao aplicar o seguinte codigo simplesmente abre a aplicação e nao carrega nada nem botoes nem text view.

mtdLayout mymtdLayout = new mtdLayout();
mymtdLayout.chamaMain();

Tive de inserir dentro de um try catch se nao dava erro ao iniciar aplicação.
mtdLyout é a segunda class.
Agradeço uma ajudinha Wink.

cumps djpinto


RE: Programar classes em android - Pedro Pinho - 16-04-2012 13:59

Boas,

possivelmente se desses um bocado mais de código talvez fosse possivel ajudar-te.

Cumprimentos

Pedro Pinho

(14-04-2012 17:51)djpinto Escreveu:  Boas tardes!
Estou a fazer uns pequenos testes em android e estou com um pequeno problema. Tenho que usar classes na minha aplicação e tenho criada uma segunda classe na qual esta um metodo para iniciar a aplicação (chama o layout principal), este vai ser mandado executar na primeira classe mas ao aplicar o seguinte codigo simplesmente abre a aplicação e nao carrega nada nem botoes nem text view.

mtdLayout mymtdLayout = new mtdLayout();
mymtdLayout.chamaMain();

Tive de inserir dentro de um try catch se nao dava erro ao iniciar aplicação.
mtdLyout é a segunda class.
Agradeço uma ajudinha Wink.

cumps djpinto



RE: Programar classes em android - djpinto - 16-04-2012 14:40

O código é o seguinte:
(classe principal)

public class TesteclassActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

try{
mtdLayout mymtdLayout = new mtdLayout();
mymtdLayout.chamaMain();
}
catch(Exception erro){
}
}
}


(classe secundaria)

public class mtdLayout extends Activity {
public void chamaMain() {
setContentView(R.layout.main);
}
}

está aqui o codigo Wink
cumps djpinto


RE: Programar classes em android - Pedro Pinho - 16-04-2012 14:49

Não tenho muita experiência de Android para poder afirmar com certeza que o erro é por causa disso, mas tenho ideia que não necessitas de um método para chamar o layout na segunda activity. Contudo, se o teu objectivo é na primeira activity escolher entre dois layouts a apresentar na segunda activity, então deves sempre acompanhar a activity deste código.

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Aqui dentro chamas o método chamaMain();
}

Por exemplo, supondo que na activity 1 tens 2 botões, um chama-te o layout main o outro main1, então na segunda activity terias que ter algo do género:


public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
chamaMain();
}

public void chamaMain()
{
if(opcao ==1)
{
setcontentview(R.layout.main);
}
else
{
setcontentview(R.layout.main1);
}
}

mas em todo o caso, terás que ter aquele pedaço de código, pelo que eu sei de Android, que é 2 meses Tongue

Outra coisa, para chamares 1 activity a partir de outra eu uso este código:

final Button buyButton = (Button) findViewById(R.id.homebutton);
buyButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent myIntent = new Intent(view.getContext(), nomedaclassquequereschamar.class);
startActivityForResult(myIntent, 0);
}
});


Este código permite-te chamar a partir de 1 botão, uma activity.

Espero que ajude, qualquer problema ou dúvida pergunta.

Cumprimentos

(16-04-2012 14:40)djpinto Escreveu:  O código é o seguinte:
(classe principal)

public class TesteclassActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

try{
mtdLayout mymtdLayout = new mtdLayout();
mymtdLayout.chamaMain();
}
catch(Exception erro){
}
}
}


(classe secundaria)

public class mtdLayout extends Activity {
public void chamaMain() {
setContentView(R.layout.main);
}
}

está aqui o codigo Wink
cumps djpinto



RE: Programar classes em android - djpinto - 16-04-2012 17:35

Obrigado pela resposta rapida. Isso do botao vou precisar no passo a seguir obrigado Wink. A outra parte nao funciona se eu meter isso do chamaMain(); dá erro porque nao está nesta class dai eu ter tentado usar esse metodo de java Confused quando faço

mtdLayout mymtdLayout = new mtdLayout();

e depois insiro o mymtdLayout. aparece logo o chamaMain() mas la ta nao faz nada Confused.

cumps


RE: Programar classes em android - Pedro Pinho - 16-04-2012 17:49

Faz um copy paste das duas classes, ou então do projecto.

Já agora, que layout usas na Activity 1 e na Activity 2? não estarás a usar esta linha "setContentView(R.layout.main);" na activity 1? é que se tiveres o layout vai ser igual e não vais ver acção nenhum e julgas que não faz nada.

Outra hipótese. Coloca um System.out.println("Método Main"); dentro do método Main e verifica se imprime essa string no Log Cat no ecplise.


(16-04-2012 17:35)djpinto Escreveu:  Obrigado pela resposta rapida. Isso do botao vou precisar no passo a seguir obrigado Wink. A outra parte nao funciona se eu meter isso do chamaMain(); dá erro porque nao está nesta class dai eu ter tentado usar esse metodo de java Confused quando faço

mtdLayout mymtdLayout = new mtdLayout();

e depois insiro o mymtdLayout. aparece logo o chamaMain() mas la ta nao faz nada Confused.

cumps



RE: Programar classes em android - djpinto - 16-04-2012 19:19

(Primeira class onde quero executar o metodo)

import android.app.Activity;
import android.os.Bundle;

public class TesteclassActivity extends Activity {


public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

try{
mtdLayout mymtdLayout = new mtdLayout();
mymtdLayout.chamaMain();

}
catch(Exception erro){
}
}
}


(Segunda classe onde tenho o método)

import android.app.Activity;
import android.app.AlertDialog;


public class mtdLayout extends Activity {

public void chamaMain() {
System.out.println("Método Main");
setContentView(R.layout.main);
}
}

Tentei com o println mas nada feito.


RE: Programar classes em android - Pedro Pinho - 16-04-2012 19:42

Ok, qual é o teu objectivo em termos de programação com essas duas classes, o que é suposto fazer? porque como tu tens agora não funciona, o system.out.println apenas te ajuda em debug, ou seja, se imprimir o valor da string no Log cat significa que o método foi chamado. Agora, se o teu objectivo é chamares o layout que queres, apenas tens que usar isto:

import com.TEUNOMEDOPACKAGE
import android.app.Activity;
import android.os.Bundle;

public class TesteclassActivity extends Activity {
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}

Se fizeres este código assim, ele vai buscar o interface main.xml que deves ter dentro da pasta Layouts.

Se por outro lado, desejas um método que te permita escolher o layout, terias que ter asssim:

import com.TEUNOMEDOPACKAGE
import android.app.Activity;
import android.os.Bundle;

public class CasaYesActivity extends Activity {
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.chamaMain();
}

public void chamaMain() {
System.out.println("Método Main");
setContentView(R.layout.main);
}
}

mas isto tudo tem que ser feito dentro da própria classe.

Não me parece, mas tal como te disse anteriormente, tenho dois meses de experiência em Android, que vás conseguir fazer o que queres, ou seja, chamar uma activity para te definir o layout da primeira.


(16-04-2012 19:19)djpinto Escreveu:  (Primeira class onde quero executar o metodo)

import android.app.Activity;
import android.os.Bundle;

public class TesteclassActivity extends Activity {


public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

try{
mtdLayout mymtdLayout = new mtdLayout();
mymtdLayout.chamaMain();

}
catch(Exception erro){
}
}
}


(Segunda classe onde tenho o método)

import android.app.Activity;
import android.app.AlertDialog;


public class mtdLayout extends Activity {

public void chamaMain() {
System.out.println("Método Main");
setContentView(R.layout.main);
}
}

Tentei com o println mas nada feito.



RE: Programar classes em android - djpinto - 16-04-2012 20:26

Sim só com o setContentView(R.layout.main); sei que funciona mas o objetivo era ter os métodos para chamar os vários layouts numa classe a parte. Adicionando o import do meu package mesmo assim ao fazer o this ele nao vai buscar o método chamaMain().
Isto é uns testes para o projecto a serio que tenho de fazer e andar de layouts para layouts para botões fiz logo 300 linhas de codigo fora o resto que falta fazer dai querer fazer classes para ter as coisas mais organizadas xD.


RE: Programar classes em android - Pedro Pinho - 16-04-2012 21:04

Se o teu objectivo é esse, podes sempre usar resources. Pões os vários caminhos em resource e lês a partir do ficheiro que criares, por exemplo layoutspath.xml, ao qual depois fazes R.layoutspath.path1 para leres o caminho 1. Seria o mais fácil digo eu. Caso contrário, para fazeres o que pretendes, da maneira que queres, podes fazer usando o seguinte:

import android.app.Activity;
import android.os.Bundle;

public class activity1 extends Activity {
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MtdLayout newLayout = new MtdLayout();
setContentView(newLayout.chamaMain());
}
}

//Esta é a activity 2, tens uma classe para chamares os layouts através de métodos. Desta maneira funciona que testei aqui rapidamente. Tens é que criar um método para cada layout digo eu, ou então dentro daquele método passas como parametro de entrada o layout que queres chamar a partir da activity 1 e depois com if/elses ou então cases a partir da versão 2.3 a escolha do return.

public class MtdLayout {

public int chamaMain() {
System.out.println("Método Main");
int devolvepath = R.layout.main;
return devolvepath;
}
}

Minha solução para o teu problema, resources era o ideal, ficarias com um ficheiro xml com ID-Value para todos os layouts, mas agora depende de ti o trabalho que queres ter.

Cumprimentos

Pedro Pinho

(16-04-2012 20:26)djpinto Escreveu:  Sim só com o setContentView(R.layout.main); sei que funciona mas o objetivo era ter os métodos para chamar os vários layouts numa classe a parte. Adicionando o import do meu package mesmo assim ao fazer o this ele nao vai buscar o método chamaMain().
Isto é uns testes para o projecto a serio que tenho de fazer e andar de layouts para layouts para botões fiz logo 300 linhas de codigo fora o resto que falta fazer dai querer fazer classes para ter as coisas mais organizadas xD.