Olá pessoal ja estamos na terceira parte do nosso tutorial e acho que muitos ja estao a se acostumar com o Android. Hoje vamos dar um grande avanço no nosso jogo, vamos ver como chamar uma outra activity e criar a nossa base de dados com algums perguntas. Preparados!!! Vamos lá.... programando com Rosário....
Primerio o que vamos fazer é criar a nova activity que logo em seguida vamos chamar, para isso vamos na raiz principal do nosso projecto e vamos abrir e na pasta src onde estao todos os arquivos java, vamos criar um novo arquivo do tipo AndroidActivity, e ele vai criar o xml e o java de uma so vez. QUE BOM!!!
Agora que ja temos criada a nossa activity novojogo e o seu ficheiro java correspondente, vamos chamar ela a partir do botao novo jogo (no arquivo java) e o codigo para fazer a instancia para chamar o formulario é o seguinte:
BtnNovo.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// codigo para chamar outra activity ou formulario (JogarActivity)
Intent i = new Intent(PrincipalActivity.this, NovoJogoActivity.class);
startActivity(i);
}
});
O que está acontecendo aqui??????
Uma Intent é usada para quando queremos chamar uma outra activity, neste caso o primeiro argumento do costructor que passamos, é a class em que nos encontramos, e o segundo, é a class que chamamos(que se encarregara de chamar a activity), e logo chamamos o método que inicia a activity e passamos a activity que queremos executar: startActivity(i);
Aqui temos como está o nosso código até agora...
E pode executar no emulador ou no telefone pra ver como está a nossa App, o arquivo APK está dentro da pasta bin do nosso projecto.
Para ficar mais claro, vou colar o código abaixo:
package com.example.quemsabesobreti;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
public class PrincipalActivity extends Activity {
//declaracao das variaves para fazer referecina aos botões da activity_principal.xml
View BtnNovo, BtnSair, BtnAcerca, BtnDefinicoes;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_principal);
BtnNovo = findViewById(R.id.BtnNovo);
BtnAcerca = findViewById(R.id.BtnAcerca);
BtnSair = findViewById(R.id.BtnSair);
BtnDefinicoes = findViewById(R.id.BtnDefinicoes);
//botao sair do jogo:
BtnSair.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
finish();
}
});
/* Button Novo Jogo */
BtnNovo.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// codigo para chamar outra activity ou formulario (JogarActivity)
Intent i = new Intent(PrincipalActivity.this, NovoJogoActivity.class);
startActivity(i);
}
});
}
}
Agora vamos abrir o codigo Xml do nosso Layout novoJogo.Xml e desenhar como será o nossa activity.
Ele estará formado de 4 botoes onde aparecerao as respostas, 3 textView, uma para escrever Pergunta, uma para aparecer a pontuacao, e outra para guardar a resposta certa.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_blue_light"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:ignore="HardcodedText,NewApi" >
<TableRow
android:id="@+id/TableRow01"
android:layout_width="match_parent"
android:layout_height="34dp"
android:gravity="left" >
</TableRow>
<ScrollView
android:id="@+id/tableRow1"
android:layout_width="match_parent"
android:layout_height="63dp"
android:baselineAligned="true"
android:gravity="left" >
<TextView
android:id="@+id/TxtXcertaResposta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pregunta"
android:textSize="20dp " />
</ScrollView>
<ScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="263dp"
android:layout_height="wrap_content"
android:orientation="vertical" >
<Button
android:id="@+id/BtnOp1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/BtnOp2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/BtnOp3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/BtnOp4"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom" >
<TextView
android:id="@+id/tvPontos"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/txtcerto"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/tvPontos"
android:layout_alignBottom="@+id/tvPontos"
android:layout_alignParentRight="true"
android:visibility="invisible" />
</RelativeLayout>
</LinearLayout>
Agora ja temos o a nossa activity com os 4 botoes onde vao aparecer as pergunas.
E ja podemos clicar no botao novo jogo, e ja vai abrir a activity para jogar.
Agora vamos trabalhar maior aprte do código na nossa activity novoJogo.java.
Como ja dissemos nos tutoriais passados, todo o código nos escrevemos dentro do método Oncreate().
Mas vamos fazer os métodos fora do método Oncreate e chamar dentro dele.
Vamos ver um pouco de teoria para entender a lógica do jogo.
Quando o Jogador clicar na resposta certa, irá chamar uma outra activity a dizer :Resposta certa, ou errada se for o caso. E la nesta activity terá um botao que permitira voltar ao jogo. E pra isso funcionar bem, vamos criar tudo em forma de métodos.
O primeiro será um métod que vamos dar o nome de:
CarregarTelaJogo();
A nossa class estará da seguinte forma:
public class NovoJogoActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_novo_jogo);
CarregarTelaJogo();
}
public void CarregarTelaJogo() {
}
}
Aí somente criamos o método e chamamos dentro do método Oncreate()
Mas ainda nao escrevemos nada dentro do método. Vamos criar outro método e chamar dentro do método CarregarTelaJogo() e vamos dar o nome de:
CarregarComponentes();
public void CarregarComponentes() {
BtnOp1 = (Button) findViewById(R.id.BtnOp1);
BtnOp2 = (Button) findViewById(R.id.BtnOp2);
BtnOp3 = (Button) findViewById(R.id.BtnOp3);
BtnOp4 = (Button) findViewById(R.id.BtnOp4);
TxtCerta = (TextView) findViewById(R.id.txtcerto);
TxtPergunta = (TextView) findViewById(R.id.TxtXcertaResposta);
tvPontucao = (TextView) findViewById(R.id.tvPontos);
}
Até ai ligamos as variaveis como os botoes que estao no formulario, mas falata declarar as variaveis.
Vamos declarar la no inicio da nossa class
private Button BtnOp1, BtnOp2, BtnOp3, BtnOp4;
private TextView TxtPergunta, TxtCerta, tvPontucao;
CRICAO DA BASE DE DADOS
Vamos criar um metodo que nos perimite criar a base de dados com os campos necessarios para o nosso jogo, ela vai ser bem simples vejamos:
//metodo inserir dados:
public void IserirDados(){
// Criar TblCadastro
data.beginTransaction();
try {
String sql = "CREATE TABLE IF NOT EXISTS TblCadastro"
+ "(id integer, pergunta Text,resposta1 Text ,resposta2 Text, resposta3 Text,resposta4 Text ,respostaCerta Text, pontuacao integer,categoria Text,nivel Integer);";
data.execSQL(sql);
// hace un commit nos cambios feitos
data.setTransactionSuccessful();
// Toast.makeText(this, "Table foi criada", 1).show();
} catch (SQLException e1) {
Toast.makeText(this, e1.getMessage(), 1).show();
} finally {
// finalizando a transaction processo
data.endTransaction();
}
// Popular a Tabela: tblCadastro
data.beginTransaction();
try {
// insert Lineas
//
//12 //////////////////
data.execSQL("insert Into TblCadastro(pergunta, resposta1,resposta2,resposta3,resposta4,respostaCerta,pontuacao)"
+ " values ('Quem criou o computador Z3?','Konrad Zuse','Bill Gates','Linus Torvalds','Steve Jobs','Konrad Zuse','100');");
//13 //////////////////
data.setTransactionSuccessful();
// Toast.makeText(this, " 1 registros foram Inseridos", 1).show();
} catch (SQLiteException e2) {
// report problem
Toast.makeText(this, e2.getMessage(), 1).show();
} finally {
data.endTransaction();
}
}
Outro método
public void ExibirErro(String titulo, String texto) {
AlertDialog.Builder mensagem = new AlertDialog.Builder(
NovoJogoActivity.this);
mensagem.setTitle(titulo);
mensagem.setMessage(texto);
mensagem.setNeutralButton("OK", null);
mensagem.show();
}
public void OpenOrCreateDatabase() {
try {
data = openOrCreateDatabase("dbJogo", MODE_PRIVATE, null);
} catch (Exception e) {
ExibirErro("Erro", "Erro ao criar o Banco de Dados");
}
}
E vamos chamar o método OpenOrCreateDatabase no metodo Oncreate() antes do metodo CarregarTelaJogo();
Abaixo da chamada do metodo OpenOrCreate dentro do metodo CarregarTelajogo()
Vamos chamar o método GetCursor();
Agora vamos ver o que tem no corpo deste metodo:
private void GetCursor() {
try {
// TxtCerta.append(" ");
// obtain uma lista com os campos abaixo
String[] columns = { "id", "pergunta", "resposta1", "resposta2",
"resposta3", "resposta4", "respostaCerta", "pontuacao" };
c = data.query("tblCadastro", columns, null, null, null, null, null);
if (c.moveToFirst()) {
do {
// Toast.makeText(this, "Total6: " + Total, 1).show();
idCol = c.getColumnIndex("id");
pergunta = c.getColumnIndex("pergunta");
resposta1 = c.getColumnIndex("resposta1");
resposta2 = c.getColumnIndex("resposta2");
resposta3 = c.getColumnIndex("resposta3");
resposta4 = c.getColumnIndex("resposta4");
respostacerta = c.getColumnIndex("respostaCerta");
columns[0] = Integer.toString((c.getInt(idCol)));
columns[1] = c.getString(pergunta);
columns[2] = c.getString(resposta1);
columns[3] = c.getString(resposta2);
columns[4] = c.getString(resposta3);
columns[5] = c.getString(resposta4);
columns[6] = c.getString(respostacerta);
columns[7] = c.getString(pontucao);
BtnOp1.setText(columns[2]);
BtnOp2.setText(columns[3]);
BtnOp3.setText(columns[4]);
BtnOp4.setText(columns[5]);
TxtCerta.setText(columns[6]);
TxtPergunta.setText(columns[1]);
} while (c.moveToNext());
}
} catch (Exception e) {
Log.e("Cursor", e.getMessage());
Toast.makeText(this, "ter: " + e.getMessage(), 1).show();
}
}
Bom até agora ja demos um grande avaço, e ja esta pronta a apresentar as perguntas do nosso jogo, para ver como ficou o código completo visite la no www.github.com/abderval
ATÉ Agora temos o nsso jogo mostrando as perguntas, no proximo tutorial vamos ver como verificar se a resposta est+a certa ou nao, e colocar a pontuacao. Ha código que nao meti aqui, mas est+a tudo completo no github.com/abderval, alguma dúvida, pode enviar um correo para rosario@unica.cu
Nos vemos no próximo tutorial
Eclesiastes 3:14
Eu sei que tudo quanto Deus fas durará eternamente; nada se lhe pode acrescentar, e nada se lhe pode tirar, e isso Deus faz para que os homens temam diante Dele.