sexta-feira, 18 de novembro de 2011

Menu de Activities

Usando o mesmo conceito do post anterior(ListActivity), neste post usarei esta classe para construir um menu com activities que podem ser selecionadas.

Segue o código da activity principal:



  1. package br.android;
  2.  
  3. import android.app.ListActivity;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.*;
  8.  
  9. public class Menu extends ListActivity {
  10.  
  11.  private static final String[] activities = new String[]{"Activity 1""Activity 2""Activity 3""Activity 4"};
  12.  
  13.     public void onCreate(Bundle icicle) {
  14.         super.onCreate(icicle);
  15.         setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, activities));
  16.        
  17. }
  18.     protected void onListItemClick(ListView l, View v, int position, long id){
  19.      switch(position){
  20.      case 0:
  21.       startActivity(new Intent(this, Activity1.class));
  22.       break;
  23.      
  24.      default:
  25.       finish();
  26.      
  27.      }
  28.     }  
  29. }



ScreenShot:





O onListItemClick age baseado no índice do item selecionado. Como o código foi escrito apenas para testes, eu só atribuí uma nova activity para a primeira opção, ao clicar nas demais, o método finish() chama o onDestroy() que encerra o programa.

Código da activity chamada:



  1. package br.android;
  2.  
  3. import android.app.Activity;
  4. import android.graphics.Color;
  5. import android.os.Bundle;
  6. import android.widget.*;
  7.  
  8. public class Activity1 extends Activity {
  9.  
  10.     public void onCreate(Bundle icicle) {
  11.     super.onCreate(icicle);
  12.     TextView txt = new TextView(this);
  13.     txt.setTextColor(Color.RED);
  14.     txt.setText("Está é a Activity 1");
  15.    
  16.     setContentView(txt);
  17.    
  18.      }
  19.     }



Criei o layout por código mesmo sem o auxílio do XML, já que a parte mais importante era saber se, de fato, a activity seria chamada.

Screenshot:




 

Lista usando array de strings

Neste artigo, demonstrarei como fiz para criar uma lista de strings numa activity usando a superclasse ListActivity e o adaptador ArrayAdapter, e implementar um Listener nos itens.
Segue o código da activity sem o listener:
  1. package br.android;

  2. import android.app.Activity;
  3. import android.app.ListActivity;
  4. import android.os.Bundle;
  5. import android.widget.ArrayAdapter;

  6. public class ListaArray extends ListActivity {
  7.     public void onCreate(Bundle icicle) {
  8.         super.onCreate(icicle);
  9.        String itens[] = {"Item1""Item2""Item3"};
  10.        
  11.        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, itens);
  12.        
  13.        setListAdapter(arrayAdapter);
  14. }
  15.    
  16. }


Primeiro se declara o array de Strings que serão usados na lista, depois construir o ArrayAdapter com os seguintes parâmetros em ordem: contexto, layout, array.
Por fim, se usa o método setListAdapter passando como parâmetro o ArrayAdapter, que automaticamente cria uma view.
O layout usado é padrão da classe android.R.
ScreenShot:
       (Clique para ampliar)
Agora o código com o listener implementado, com exibição de mensagem como consequência:


  1. package br.livro.android.cap3;
  2.  
  3.      
  4.  
  5.     import android.app.Activity;
  6.     import android.app.ListActivity;
  7.     import android.os.Bundle;
  8. import android.view.View;
  9. import android.widget.ArrayAdapter;
  10. import android.widget.ListView;
  11. import android.widget.Toast;
  12.  
  13.     public class ListaArray extends ListActivity {
  14.         public void onCreate(Bundle icicle) {
  15.             super.onCreate(icicle);
  16.            
  17.            String itens[] = {"Item1""Item2""Item3"};
  18.  
  19.            ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, itens);
  20.  
  21.            setListAdapter(arrayAdapter);
  22.  
  23.     }
  24.         protected void onListItemClick(ListView l, View v, int position, long id){
  25.             super.onListItemClick(l,v,position,id);
  26.             Object o = this.getListAdapter().getItem(position);
  27.             String item = o.toString();
  28.             Toast.makeText(this"Você selecionou: " + item, Toast.LENGTH_SHORT).show();
  29.         }
  30.     }



Se usa o método da superclasse para recuperar a posição(index) do item.
Em seguida cria-se um objeto com essa posição usando os métodos getListAdapter().getItem(position).
Por fim basta transformar o objeto em String e usar o método Toast.makeText(contexto, texto, duração).
ScreenShot:
(Clique para ampliar)

sexta-feira, 11 de novembro de 2011

Passagem de parâmetros entre activities.


Neste artigo vou demonstrar a passagem de parâmetros para uma activity através de objetos do tipo Bundle.

A activity inicial tem um campo pra receber um texto e um botão com um listener.

Activity inicial: PrimeiroExemplo.java
Layout: Main


  1. package br.livro.android.cap2;
  2.  
  3. import android.app.Activity;
  4. import android.content.*;
  5. import android.os.Bundle;
  6. import android.util.Log;
  7. import android.view.View;
  8. import android.view.View.*;
  9. import android.widget.Button;
  10. import android.widget.*;
  11. import android.widget.TextView;
  12.  
  13. public class PrimeiroExemplo extends Activity {
  14.     /** Called when the activity is first created. */
  15.     @Override
  16.     public void onCreate(Bundle icicle){
  17.         super.onCreate(icicle);
  18.         setContentView(R.layout.main);
  19.        
  20.         //Cria Objetos
  21.         Button botaoTelaUm = (Button) findViewById(R.id.botao);
  22.         final EditText campoDeDigitação = (EditText) findViewById(R.id.campodedigitacao);
  23.        
  24.         //Cria botão com Listener e passagem de parâmetros.
  25.         botaoTelaUm.setOnClickListener(new Button.OnClickListener () {
  26.             public void onClick(View v){
  27.                 Intent it = new Intent(v.getContext(), TelaDois.class);
  28.                 Bundle params = new Bundle();
  29.                 String resposta = campoDeDigitação.getText().toString();
  30.                 params.putString("mensagem", resposta);
  31.                 it.putExtras(params);
  32.                 startActivity(it);
  33.             }
  34.             });                    
  35.          }
  36. }


Para passar parâmetros de uma activity para outra, se cria um objeto do tipo Bundle e se usa o método putExtras(Bundle) na intent.

Porém, antes disso, devem ser colocados valores no objeto do tipo Bundle. No caso, como coloquei uma String, eu usei o método putString(chave, valor), mas poderia ter colocado um putBoolean no caso do valor ser um boolean e assim por diante... .  O valor recebido foi a variável "resposta" que recupera o texto escrito no EditText "campoDeDigitação" com os métodos "getText()" e "toString()".




 Agora vamos para a activity chamada: TelaDois
Layout: telachamada.xml


  1. package br.livro.android.cap2;
  2.  
  3. import android.app.Activity;
  4. import android.content.*;
  5. import android.os.Bundle;
  6. import android.util.Log;
  7. import android.view.View;
  8. import android.view.View.*;
  9. import android.widget.Button;
  10. import android.widget.CheckBox;
  11. import android.widget.TextView;
  12.  
  13. public class TelaDois extends Activity {
  14.         /** Called when the activity is first created. */
  15.         @Override
  16.         public void onCreate(Bundle icicle){
  17.             super.onCreate(icicle);
  18.             TextView txt = new TextView(this);
  19.             Intent it = getIntent();
  20.             Bundle params = it.getExtras();
  21.             if (params != null){
  22.             String texto = params.getString("mensagem");
  23.             txt.setText(texto);
  24.             setContentView(txt);}
  25.             if (params == null){
  26.                 txt.setText("Nenhuma mensagem foi enviada");
  27.                 setContentView(txt);
  28.             }    
  29.         }
  30.  }
  31.  


Da mesma maneira é preciso um  método pra recuperar a intent, que é o "getIntent()". Após recuperada, é preciso recuperar os objetos dados como extras com o método "getExtras()". Depois se atribui ao texto "txt" o parametro String "mensagem" do Bundle da activity anterior, com o método "getString". As instruções condicionais são para o caso de nenhum parâmetro ter sido passado.