|
|
Kierunek Informatyka
|
|||
|
|
||||
Instrukcja do ćwiczeń laboratoryjnych nr:
|
10
|
Nazwa
przedmiotu:
|
||
Temat:
Cykl życia aktywności – zabezpieczanie
danych formularza, okna dialogowe
|
Tryb studiów: stacjonarne |
|||
|
Czas trwanie ćw. 2x45 min |
||||
|
Autor materiałów:
dr Marcin Skuba |
||||
1. Treści programowe:
Cykl życia aktywności, wybrane funkcje aktywności,
użycie funkcji onSaveInstanceState do zapisywania danych tymczasowych, okna dialogowe.
2. Cel zajęć:
Celem zajęć jest poznanie kolejności wykonywania podstawowych
metod aktywności, wyrobienie umiejętności tworzenia i używania okien
dialogowych oraz zabezpieczanie danych w formularzu przed utratą podczas
obracania ekranu.
3. Materiały dydaktyczne
public class
MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("Test", "OnCreate()");
//Alternatywa dla void
onDestroy ()
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
@Override
public void
handleOnBackPressed() {
Log.i("Test",
"OnBackPressed()");
finish();
}
});
}
@Override
protected void onStart() {
super.onStart();
Log.i("Test", "OnStart()");
}
@Override
protected void onResume() {
super.onResume();
Log.i("Test", "OnResume()");
}
@Override
protected void onPause() {
super.onPause();
Log.i("Test", "OnPause()");
}
@Override
protected void onStop() {
super.onStop();
Log.i("Test> ", "OnStop()");
}
@Override
protected void onDestroy () {
super.onDestroy();
Log.i("Test", "OnDestroy()");
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
Log.i("Test", "OnSaveInstanceState()");
super.onSaveInstanceState(savedInstanceState);
}
@Override
public void onBackPressed() {
super.onBackPressed();
Log.i("Test", "OnBackPressed()");
}
}
a). Uruchomienie nowej aplikacji

b) Użycie przycisku


c). powrót


d) Użycie przycisku


e). powrót


f) Użycie przycisku


g) Powrót


h) Obrót


Przykład aplikacji zapisującej dane z
formularz poprzez metodę onSaveInstanceState():

Plik activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
android:padding="20dp"
android:gravity="center">
<TextView
android:id="@+id/textViewDaneZBazy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:textSize="22dp"
android:text="Dane " />
<EditText
android:id="@+id/editTextImie"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:layout_margin="20dp"
android:text="Name"
/>
<EditText
android:id="@+id/editTextWiek"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:layout_margin="20dp"
android:text="Name"
/>
<CheckBox
android:id="@+id/checkBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Opcja do wyboru "/>
</LinearLayout>
Plik MainActivity.java
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.CheckBox;
import android.widget.EditText;
public class
MainActivity extends AppCompatActivity {
EditText editTextImie;
EditText editTextWiek;
CheckBox checkBox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTextImie = findViewById(R.id.editTextImie);
editTextWiek = findViewById(R.id.editTextWiek);
checkBox = findViewById(R.id.checkBox);
if (savedInstanceState != null) {
editTextImie.setText(savedInstanceState.getString("KEY_IMIE"));
editTextWiek.setText(savedInstanceState.getString("KEY_WIEK"));
checkBox.setChecked(savedInstanceState.getBoolean("KEY_OPCJA"));
}
}
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("KEY_IMIE", editTextImie.getText().toString());
outState.putString("KEY_WIEK", editTextWiek.getText().toString());
outState.putBoolean("KEY_OPCJA", checkBox.isChecked());
}
}
Metoda budująca okno dialogowe z
możliwością udzielenia odpowiedzi TAK NIE

private void Dialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Uwaga")
.setMessage("Treść pytania....")
.setIcon(R.drawable.ic_baseline_beach_access_24)
.setPositiveButton("TAK", new DialogInterface.OnClickListener() {
public void
onClick(DialogInterface dialog, int id) {
}
})
.setNegativeButton("NIE", new DialogInterface.OnClickListener() {
public void
onClick(DialogInterface dialog, int id) {
}
}).show();
}
Przykład ukazujący deklarację przycisku
w postaci przełącznika z zapisaniem stanu w czasie zmiany orientacji ekranu:

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
public class
MainActivity extends AppCompatActivity {
final boolean STOP = false;
final boolean START = true;
boolean startStop=START;
ImageButton imageButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("Test: ", "onCreate");
imageButton = findViewById(R.id.imageButton);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void
onClick(View view) {
if(startStop==START){
startStop=STOP;
}else if(startStop==STOP){
startStop=START;
}
setIconButton();
}
});
if(savedInstanceState!=null){
startStop = savedInstanceState.getBoolean("KEY_BUTTON");
setIconButton();
}
}
private void setIconButton(){
if(startStop==START){
imageButton.setBackgroundResource(R.drawable.on_ic_baseline_cast_24);
}else if(startStop==STOP){
imageButton.setBackgroundResource(R.drawable.off_ic_baseline_cast_connected_24);
}
}
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("KEY_BUTTON", startStop);
}
}
4. Zadania
Zadanie 1.
Napisz program, w którym zdeklaruj pola
tekstowe do wprowadzenia danych studenta: imię, nazwisko, rok studiów, email
oraz pole pojedynczego wyboru do prowadzenia informacji czy student ma
zaliczenie (true/false).
Zabezpiecz formularz tak aby dane nie znikały podczas obracania ekranu.
Używając przycisku systemowego „<” „wstecz” wyświetl pole dialogowe z
pytanie „Czy chcesz wyłączyć program?” Jeśli zostanie użyty przycisk TAK
program powinien się zakończyć.