Você está na página 1de 28

Intent, Bundle, Handler

Professor: Mário de Jesus


Navegação básica
No Android a navegação entre activities é feita por meio da classe Intent, que
representa uma ação a ser realizada (neste caso a navegação). Essa classe recebe em seu
construtor as activities de origem e destino e em seguida devemos invocar o método
startActivity da activity, passando a instância de Intent como parâmetro.

Exemplo
Navegação com passagem de parâmetros
É muito comum que ao navegarmos entre duas activities no Android seja
necessário trafegar dados entre elas. Para isso utilizamos a classe Bundle, que irá
encapsular as informações que queremos transportar entre as activities a “anexamos”
ao nosso Intent.

Na navegação com passagem de dados:

1) Dado que queremos enviar para a segunda tela - String email = "email@mail.com";
2) Instância da classe Bundle - Bundle bundle = new Bundle();
3) Adicionar o dado no bundle - bundle.putString("email", email);
4) Criar o intent para a navegação entre as telas: Intent in = new Intent(Origem.this,
Destino.class);
5) Adicionar ao bundle ao intent - in.putExtras(bundle);
6) Executar a ação de navegação - startActivity(in);
Recuperar dados enviados por parâmetro
1) Recuperar os dados bundle através do Intent - Bundle bundle =
getIntent().getExtras();
2) Obter o dado armazenado como texto no bundle a partir do seu identificador
("email") - String email = bundle.getString("email");
3) Exibir o dado na tela - mensagem.setText("Olá " + email);
Conhecendo as Splash Screens

As telas de aberturas, tecnicamente conhecidas como Splash Screens, são telas


que são apresentadas ao usuário no primeiro instante em que ele abre a App,
justamente para apresentarmos uma marca, ou então realizarmos algum tipo de pré-
prossamento que exige alguns segundos. Veja alguns exemplos:
Inserindo delay na Splash Screen com o Handler do Android

O Android nos oferece a classe Handler que, internamente, trabalha com Threads
assim como no Java, porém, nos provê alguns métodos capazes de nos ajudar nessa
situação. Portanto, vamos instanciá-la:

Para executarmos uma thread com delay no Handler, utilizamos o método


[postDelayed()], que recebe dois parâmetros:

1º parâmetro: uma interface Runnable que é justamente a Thread que será


executada após o tempo de delay.

2º parâmetro: tempo de delay em millisegundos.


Criando Projeto App03
Clique m File, new, Android Application Project. Defina o nome do App como App03 e clique em
next
Passando as imagens para o projeto

Arraste as imagens para a pasta drawable e clique em ok para copiar. O nome das
imagens deve começar com letra minúscula, não possuir espaços ou caracteres especiais.
Colocando imagem centralizada na Tela01

Arraste um ImageView para sua tela XML e selecione a imagem do sorvete. No


Código XML, altere a cor de fundo do para android:background="#45b6fe". Acrescente o
scaleType centerCrop e o ajustViewBounds deixe true. Ajuste para que a imagem tenha
como referência todos os cantos da tela.

Código xml da tela


<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#45b6fe"
tools:context=".MainActivity">

<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/sorvete" />
</androidx.constraintlayout.widget.ConstraintLayout>
Criando a Tela02

Clique com o botão direito na pasta exemple dentro do pacote java ->
com.exemple, selecione new, Activity, Empty Views Activity, escreva Tela02, selecione o
java e finalize
Retirando a barra de título no java e codificando a tela de splash

Entre na pasta src e selecione a MainActivity, dentro das propriedades do método


onCreate vamos acrescentar o código do Handler com tempo de 3000 milissegundos que
corresponde a três segundos para chamar a tela02.

Código java da tela


package com.example.appsorvete;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Handler handler = new Handler();


handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(MainActivity.this,
Tela02.class);
startActivity(intent);
}
},3000);
}
}
Aplicativo em Execução
Retirando a barra de título da tela02
Altere a cor de fundo da tela

Arraste um textView, ajuste suas alças do constraintLayout como está na imagem abaixo
e renomeie a variável para textView1

Vai ficar assim:


Código do textView

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"

android:gravity="center"
android:text="Qual Sorverte deseja comprar?"
android:textSize="40dp"
android:textStyle="bold"

app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

Arraste um TextInputLayout, grude ele no bottom do TextView

Código do TextInputView

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/textInputLayout3"
android:layout_width="409dp"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView1">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/txt1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Digite uma das opções abaixo " />
</com.google.android.material.textfield.TextInputLayout>
Arraste mais um TextInputLayout, grude ele no bottom do TextInputLayout criando
anteriormente.

Código do TextInputView

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/textInputLayout4"
android:layout_width="409dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textInputLayout3">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/txtv2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Quantidade" />
</com.google.android.material.textfield.TextInputLayout>

Arraste mais um Botão (button), deixe ele no meio da tela


Código do Botão

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="Comprar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textInputLayout4" />
Código do ListView

<ListView
android:id="@+id/listView1"
android:layout_width="409dp"
android:layout_height="273dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button" />

Código completo da Activity

<?xml version="1.0" encoding="utf-8"?>


<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#daf0ff"
tools:context=".Tela02">

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"

android:gravity="center"
android:text="Qual Sorverte deseja comprar?"
android:textSize="40dp"
android:textStyle="bold"

app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/textInputLayout3"
android:layout_width="409dp"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView1">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/txt1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Digite uma das opções abaixo " />
</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/textInputLayout4"
android:layout_width="409dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textInputLayout3">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/txtv2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Quantidade" />
</com.google.android.material.textfield.TextInputLayout>

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="Comprar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textInputLayout4" />

<ListView
android:id="@+id/listView1"
android:layout_width="409dp"
android:layout_height="273dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button" />
</androidx.constraintlayout.widget.ConstraintLayout>
Criando modelo para inflar(colocar) na nossa lista

Agora vamos criar um Layout sem o código java. Para isso clique com o botão direito em
layout, new Layout Resource File

Coloque o nome de modelo_lista e finalize o processo de criação

Agora vamos trocar o layout principal para LinearLayout. Para isso clique com o botão
direito no ConstraintLayout, Convert view, selecione LinearLayout e clique em Apply.
Acrescente uma orientação para o LinearLayout. Digite android:orientation=“horizontal”

Agora arraste dois textView e um ImageView, vai ficar assim:


Deixe assim:

Código completo do modelo_lista

<?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<TextView
android:id="@+id/texto1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="30sp"
android:gravity="right"
android:textStyle="bold"
android:text="1°)" />

<ImageView
android:id="@+id/imageView2"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_weight="1"
android:adjustViewBounds="false"
android:cropToPadding="false"
android:scaleType="centerInside"
app:srcCompat="@drawable/sor_chiclete" />

<TextView
android:id="@+id/texto2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="30sp"
android:text="Chiclete - R$5,00" />

</LinearLayout>
Criando nossa classe Adaptadora

Agora crie uma classe no pacote exemplo do java, chamada AdapImg

Agora herde os componentes do BaseAdapter na classe AdapImg


Crie as variáveis de vetor, o contexto que vai receber sua tela, o inflater que vai colocar
nosso modelo de lista dentro do listView e o construtor da classe.
Código completo do AdapImg

package com.example.appsorvete;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class AdapImg extends BaseAdapter {

Context context;
String listpreco[];
int listImages[];
LayoutInflater inflater;

public AdapImg(Context ctx, String[] preco, int [] images){


this.context = ctx;
this.listpreco=preco;
this.listImages=images;
inflater = LayoutInflater.from(ctx);
}
@Override
public int getCount() {
return listImages.length;
}

@Override
public Object getItem(int i) {
return null;
}

@Override
public long getItemId(int i) {
return 0;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
view = inflater.inflate(R.layout.modelo_lista, null);
TextView texto1=(TextView) view.findViewById(R.id.texto1);
TextView texto2=(TextView) view.findViewById(R.id.texto2);
ImageView img = (ImageView)
view.findViewById(R.id.imageView2);
texto1.setText(""+i);
texto2.setText(listpreco[i]);
img.setImageResource(listImages[i]);
return view;
}
}
Agora abra o código java da Tela02, crie os vetores de imagem e valores, mapeie o
listView dentro do método onCreate, instancie o AdapImg e passe as listas e a tela no construtor
do objeto

Código completo da Tela02.java

package com.example.appsorvete;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ListView;

public class Tela02 extends AppCompatActivity {

String listpreco[]={"10.00", "11.00", "12.00", "14.00" };


int listImages[]={R.drawable.sor_chiclete,
R.drawable.sor_chocolate,
R.drawable.sor_menta,
R.drawable.sor_morango};
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tela02);
listView=(ListView) findViewById(R.id.listView1);
AdapImg adap= new AdapImg(getApplicationContext(), listpreco,
listImages);
listView.setAdapter(adap);
}
}
Saída
Referências

https://youtu.be/aUFdgLSEl0g?si=Q57mHEA3Rvdx4lPN

Você também pode gostar