Jump to content

Intents e passagem de valores na mesma actividade


Nmar93
 Share

Recommended Posts

Boas pessoal,

Eu estou a fazer uma "pequena aplicação" que regista vários custos tais como o Combustível, a Alimentação, entre outros.

O que estou a fazer e usar tudo nas mesmas actividades!

Tenho duas abas. Uma para registar e outra para listar. A de listar faz tudo, tirando, o inserir. Pode-se dizer que e a gestao de tudo.

E bom, eu tenho várias listviews na mesma actividade e para efectuar a edição eu tenho que "apanhar" o ID seleccionado nessa listview. Eu ja tinha feito algo do genero, mas em actividades diferentes.

Ao carregar na funçao OnItemClick, eu fazia algo do genero:

(Atençao que isto era de um outro trabalho meu!)

Intent launchActivity = new Intent(getApplicationContext(), EditaTarefa.class);
launchActivity.putExtra("theID", String.valueOf(theCombustivel.get(position).getID()));
startActivityForResult(launchActivity, REQUEST_CODE);

Como podem ver eu mandava um ID depois para a outra actividade que a apanhava desta forma:


if(getIntent().hasExtra("theID")){
theID = Integer.parseInt(getIntent().getExtras().getString("theID"));

CombustivelDataBaseHandler db = new CombustivelDataBaseHandler(getApplicationContext());
Combustivel theCombustivel = db.getCombustiveis(theID);

//Aqui ficaria depois o txtQualquerCoisa.setText(String.valueOf(theCombustivel.getTarefa() )) depois de declarar a base Handler e essas cenas.

Basicamente é isto, mas a minha pergunta é fazer exactamente o que aquelas linhas acima fazem mas na mesma actividade.

Eu quero é tomar o valor do que é seleccionado ao meu editText que aparece tambem logo que carrego no indice.

Nao sei se me fiz entender!

Se souberem como me ajudar, agradecia muito mesmo.

Cumprimentos 😉

Link to comment
Share on other sites

Podes sempre colocar os valores num singleton da app acessível por todas as actividades.

EDIT:

Se calhar não percebi bem. O que tu queres é, seleccionar qualquer coisa numa aba, para depois ires à outra ver os detalhes do que foi seleccionado? Se for isso, não me parece ser uma forma de navegação muito boa, mas o truque seria teres uma referência para a outra actividade ou para um objecto que fosse lido pela outra actividade. De qualquer forma tens sempre que notificar a outra actividade para "ler" a alteração, pelo que podes mesmo fazer isto com notificações.

Edited by KTachyon

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Em que parte?

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Nao nao!

Percebeste mal!

Eu so disse que tou a organizar por abas a aplicaçao toda.

Tenho uma aba que ser para os registos e a outra para a gestao.

E nessa aba de gestao tenho 6 botoes.

Ao carregar num botao, nessa mesma actividade, aparece uma listview com supostamente os dados registados na base de dados com um botao em cima que serve para esconder a listview e o proprio botao. Usando o NaoseiQue.setVisibility(View.GONE);

E pronto ao carregar num dado qualquer da base de dados, e aparecer um novo editText, com o suposto dado ja preenchido que seleccionei na listview e um botao Editar em baixo.

A minha dificuldade e passar o valor da listview seleccionado para o campo EditText que depois aparece em cima.

Daí até ter exemplificado com o codigo que tinha desenvolvido num outro trabalho mas que consiste em actividade diferentes, e é daquela maneira que se deve fazer.

O que pretendo e mesmo so nessa actividade!

Cumps

Link to comment
Share on other sites

Então, se é na mesma actividade só tens que apanhar a linha da listview que foi seleccionada.

ListView lv = getListView();
   lv.setOnItemClickListener(new OnItemClickListener() {
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
           // o que precisa de ser feito aqui
       }
   });

Deves ter os dados organizados num adapter, certo? Só tens que os ir buscar. Caso seja necessário poder fazer uma subclasse do adapter para que tenhas acesso à informação da forma como queres.

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Ja agora aproveito para perguntar!

Nesta mesma aplicação, a operação de registo e listagem funcionam na perfeição no emulador, mas quando instalo o .apk no telemovel (tambem pelo run, mas escolho o telemovel), essas operações nao realizam direito. Suspeito que seja o de listagem porque o inserir da sempre um Toast a dizer "inserido com sucesso" mas quando chego a listagem dessa mesma cena, a textview aparece a dizer que nao existe registos (aparece caso a base de dados esteja vazia == true). No emulador, tudo perfeito. Isto e muito estranho...

Link to comment
Share on other sites

Epah, podem ser muitas coisas. Confirma a versão para a qual estás a compilar (se é a mesma que o SO que tens no telemóvel). Podes espreitar o AndroidManifest.xml para descobrires isto.

Para além disso, o emulador, apesar de ser chamado de "emulador", é bastante mau. Existem várias coisas que não funcionam como devem apesar de ser suposto funcionar exactamente como o telemóvel. E tem outros problemas derivados da forma como decidiram implementar a comunicação com as ferramentas que tornam o emulador verdadeiramente horrível como ferramenta de apoio ao desenvolvimento. Resumindo, não confies no emulador, faz sempre o deploy para o dispositivo.

A minha sugestão para descobrires o problema é criares um log que regista toda a informação relevante durante esse processo, para que possas avaliar o que está a correr mal.

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

O problema e que eu sei que aquilo esta mesmo certo!

Tenho 110% de certeza!

E de facto o emulador conseguiu provar isso, mas e tao estranho... nao e mesmo o suficiente porque eu quero que isto funcione no telemovel e nao no emulador, senao ia-me pelo Vb.net e fazia la o programa...

Link to comment
Share on other sites

Confirma o API Level para que estás a compilar. Espreita aqui:

http://developer.android.com/guide/appendix/api-levels.html

De qualquer forma, a minha sugestão ainda se mantém. Manda-o fazer o log de tudo o que achares relevante até achares o problema.

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Ja agora ate posso postar o que me aconteceu, caso aconteca o mesmo a alguem.

O problema era simplesmente da base de dados no telemovel :S

A ultima coisa em que pensei foi ir para o menu de aplicaçoes e limpar os dados da minha aplicaçao... a partir dai, perfeito!

Sempre consegui resolver o problema de apanhar o objecto e preencher o editText, com o ID seleccionado, mas agora fica a dúvida de como eu faço o Update ou o Delete assim que o ID for seleccionado.

O meu editar encontra-se assim neste momento:

btnEditarCombustivel.setOnClickListener(new View.OnClickListener() {

 @Override
 public void onClick(View v) {

  String txtEdicaoCombustivel = ((EditText) findViewById(R.id.et_EditarCombustivel)).getText().toString();

  if(txtEdicaoCombustivel.length() != 0){

  //double ConversaoEdicaoComb = Double.parseDouble(txtEdicaoCombustivel);
  Combustivel oCombustivel = new Combustivel(txtEdicaoCombustivel);

  Toast myToast = Toast.makeText(getApplicationContext(),
    "Preço actualizado com sucesso.", Toast.LENGTH_LONG);
  myToast.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL, 0, 100);
  myToast.setDuration(3000);
  myToast.show();

  db_Combustivel.UpdateCombustivel(oCombustivel);

  btnEditarCombustivel.setVisibility(View.GONE);
  btnApagarCombustivel.setVisibility(View.GONE);
  txtEditarCombustivel.setVisibility(View.GONE);

  theCombustivel = db_Combustivel.getAllCombustiveis();

  lstCombustivel.setAdapter(new CombustivelAdapter(getApplicationContext()
    , android.R.layout.simple_list_item_1, theCombustivel));
  }
 }
   });

Estou a fazer mais algum erro estupido?

Cumprimentos!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.