You are currently viewing Curso Android – Intents

Curso Android – Intents

No nosso curso android, vai ser explicada a utilização de intents. Estes manifestam uma “intenção abstrata” de uma operação que vai ser executada. No caso do tutorial a seguir, é a intenção de saltarmos de um ecrã para outro, para isso, vamos utilizar um pouco do exemplo dado anteriormente, que pode ser consultado aqui.

Criar novo Layout

Após criar um novo projeto como explicado no tutorial anterior, precisamos de criar uma nova activity que terá o nome de “SecondActivity”. Para isso basta clicar com o botão direito do rato e realizar o seguinte:

CreateAnotherActivity

Podemos observar que para além de ter criado na pasta java uma actividade nova, também nos layouts foi criado um novo.

Layouts

Mais uma vez, os layouts irão ser fornecidos para facilitar todo o processo. Importante não esquecer que o código deverá ser colocado dentro das tags “RelativeLayout”.

Para o primeiro layout, “activity_main.xml” vamos ter o seguinte código:

<LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Nome:"
            android:id="@+id/textView" />
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/editName_txt"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/textView" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Submeter Dados"
            android:id="@+id/btnSubmit"
            android:layout_below="@+id/editIdade_txt"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginTop="45dp"/>
 </LinearLayout>

Para o segundo layout, “activity_second.xml” vamos ter o seguinte:

<LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/linearLayout">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Large Text"
            android:id="@+id/txt_Data"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Cancelar"
            android:id="@+id/btnCancelar" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="OK"
            android:id="@+id/btnOk" />
 </LinearLayout>

Programar Intents

  • Intent – Serve para registar uma intenção, neste caso para utilizar outra componente da aplicação (outro ecrã)
  • intent.putExtra() – Se for necessário passar algum parametro/dados para a segunda atividade
  • startActivityForResult() – Estamos a dizer à aplicação que esta deverá ir para outro ecrã mas, quando voltar terá de vir com algum resultado. A variável REQUESTCODE é um código que lhe passamos para sabermos de qual actividade ele vem. Se tivermos muitas actividades, podemos controlar com o REQUESTCODE.

Como variáveis globais nas duas actividades criadas colocar:

  • String KEY_WORD = “Username”;
    • Irá permitir obtermos a string passada de uma actividade para outra
  • int REQUESTCODE = 10;
    • Irá permitir obter qual o resultado retornado pelo intent

Exemplo:

public class MainActivity extends AppCompatActivity {
    String KEY_WORD = "Username";
    int REQUESTCODE = 10;
(...)

Para o tutorial, vamos pensar nos intents de duas formas que irão ser demonstradas consoante a implementação de todos os passos demonstrados. Nada melhor que a prática para explicar a teórica. Para começar, fica ao critério do leitor programar a acção do botão “Submeter Dados” da “activity_main.xml” mas, para facilitar iremos colocar diretamente no ficheiro .xml a chamada ao evento:

< (...)
android:onClick="submeterDados"/>

E, criar a função “submeterDados” na MainActivity da seguinte forma:

public void submeterDados(View view) {
        // Vou submeter os dados mas, e se os dados estiverem vazios?
        // Como vou buscar o conteúdo da editText?
        EditText nome = (EditText)findViewById(R.id.editName_txt);
        if(nome.getText().toString().isEmpty())
            return;

        // Neste ponto, é sinal que a EditText tem dados, logo podemos passar para outro ecra
        Intent intent = new Intent(this, SecondActivity.class);
        intent.putExtra(KEY_WORD, nome.getText().toString());
        startActivity(intent);
    }

SecondActivity

Chegou a hora de programar a “SecondActivity”. O objetivo será buscar o intent passado com o nome do utilizador e escrever o mesmo no ecrão.

A função onCreate deverá ficar com o seguinte aspecto:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Intent intent = getIntent();
        String username = intent.getStringExtra(KEY_WORD);
        TextView txt_Data = (TextView)findViewById(R.id.txt_Data);
        txt_Data.setText("O utilizador tem como nome: " + username);
    }

Como poderá ser observável, ao correr a aplicação, o nome inserido no primeiro ecrã aparece no segundo. Mas, agora o objetivo é cancelar a operação ou dar ok se o nome for correto. Os botões no segundo ecrã estão lá mas nada fazem, pelo que precisamo de ser programados da seguinte forma:

public void OK(View v){
        setResult(RESULT_OK);
        finish();
    }

public void CANCELAR(View v){
        finish();
}

Obter feedback

Se o leitor correr a aplicação, esta volta sempre ao primeiro ecrã após o click nos botões (graças ao “finish”) mas, poderá dar algum sentido extra à aplicação, escrever um feedback ao utilizador. Pelo que, algumas pequenas alterações na função MainActivity poderão levar a obter esse feedback:

Na função, submeterDados, alterar a última linha para:

public void submeterDados(View view) {
        (...)
        //startActivity(intent);
        startActivityForResult(intent, REQUESTCODE);
    }

Neste ponto estamos a dizer à aplicação que a mesma irá ter um resultado quando regressar do ecrã mas, para lermos esse resultado, precisamos de implementar um método que é o seguinte:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode == RESULT_OK)
            if(requestCode == REQUESTCODE)
                Toast.makeText(getApplicationContext(), "Tudo Correu Bem", Toast.LENGTH_LONG).show();
    }

Com isto, poderá correr a aplicação e, sempre que clicar em “OK” no segundo ecrã, deverá receber um feedback.

 

Não perca os próximos tutoriais aqui no Tech-Portugal!

Participa no concurso de natal do Tech-Portugal e habilita-te a ganhar uma pen de 32GB! 

António Sousa

António Sousa, técnico de redes e sistemas informáticos e fundador do Tech em Português! Sou um amante das novas tecnologias e um aventureiro dessa grande "auto-estrada" que é a internet!