Android Studio – Fragment Dinamico (realizzarla)

Android Studio – Fragment Dinamico (realizzarla)

Un’App può girare su Device molto diversi. L’App è una, ma deve assicurare sempre un comportamento coerente.

Scenario 1:

User Interface e Schermi.

Fragment: sono nati per gli schermi grandi. E’ bene da precisare questo. E’ importante l’interazione con gli schermi grandi.

Interagire con uno schermo piccolo ad esempio di un Device (Smartphone), le funzionalità su uno Schermo grande non vanno più bene.

Schermo Piccolo (Smartphone) → Schermo Grande (Tablet)

Cambiano le funzionalità.

L’interfaccia in base allo schermo Grande, si deve adattare.

Euristiche di Design → ciò che si progetta sugli Smarpthone, sui Tablet non va bene

Scenario 2:

Un’Activity supporta al massimo un’operazione da parte dell’utente.

Input → Bottone

Input → editText

Input → textView

L’iterazione

App Complesse → Creano Task con diverse Activity

Se Avessi: La mia App

Formata da diversi Task

Activity 1 → Activity2, ma Activity 1 (passa nella Pila al secondo Posto).

Activity2 → Activity3, ma Activity 2 (passa nella Pila al secondo Posto)

Avremo nel primo caso: Activity2 e poi Activity 1 (NELLA PILA)

Avremo nel secondo caso: Activity3, Activity2, Activity1 ultimo (NELLA PILA)

Ogni intent crea ed alloca risorse a nuove Activity → continua navigazione porta spreco di risorse e può peggiorare prestazioni.

Anche il passaggio di dati (Bundle ) sovraccarica e gestisce ed esaurisce la memoria.

La continua navigazione, selezionare un elemento, vedere dei dettagli di quell’elemento.

Selezionando un altro elemento, vedere i dettagli e poi tornare indietro. E’ una navigazione tra Activity.

Ogni Intent crea ed alloca Risorse a Nuove Activity.

Se ho un’Activity → Activity2, tramite Intent. Creo e alloco Risorse.

Il passaggio dei dati con Bundle, sovraccarica la gestione ed esaurisce la memoria.

Gestire il tutto (ad esempio anche il Bundle) con le tante Activity

Spreco di RISORSE. Le prestazioni possono peggiorare.

Gestire il tutto con le Activity, sovraccarica ed esaurisce la Memoria.

Scenario 1: l’iterazione, ciò che si vede cioé, l’interfaccia. Come l’utente interagisce con l’App.

Scenario 2: Prestazioni.

2 Scenari, ben diversi, che propongono dei problemi, che vanno risolti.

Esempio Visualizzatore di Libri. E’ lo scenario che ci dimostra che progettare con il Fragment, vuol dire sprecare meno risorse.

I FRAGMENT

Permettono di risolvere dei problemi

1) in merito all’usabilità (Lo schermo)

2) Gestione Memoria

Per quanto riguarda lo schermo, può capitare di avere una diversa User Experience a seconda dello Schermo stretto/grande.

2 modi di progettare: Activity A mostra l’elenco dei titoli

Activity B, è invocata quando l’utente ha selezionato un titolo.

FRAGMENT

Rappresenta una porzione interattiva della User Interface

I 2 pannelli interattivi sono i 2 Fragment.

1 Activity → PIU’ FRAGMENT

Ci sono vari pezzi della User Interface dell’Activity ma che sono coordinati tra di Loro.

Ci sono 2 Vantaggi utilizzando il Fragment.

Vantaggio 1: si risparmia la creazione/distruzione di Activity (+ dati e risorse associate) che prima O.S. Android doveva gestire durante il Task

Vantaggio 2: un Fragment può essere riusato in più Activity

Fragment scompone e gestisce la User Interface e quindi vuol dire che scompone anche i Task.

Ha il ciclo di vita proprio. Activity ha il suo Ciclo di Vita, anche il Fragment ha il suo Ciclo di Vita.

Fragment permette di gestire la History dell’interazione fatta dall’utente sulla User Interface.

Fragment supportato e necessario per realizzare le guidelines del Material Design.

Aggiunta dinamica Fragment

E’ più facile. Tramite il FragmentManager. Abbiamo una sequenza di istruzioni.

E’ bene iniziare una FragmentTransaction. E’ una transazione.

C’è un commit() alla fine.

La transazione, è una sequenza di istruzioni che viene identificata dal Programma O.S. Android, come unica.

Se va male una delle istruzioni in sequenza, viene annullato tutto. Non c’è un commit()

begin e commit()

All’interno dell’Activity:

FragmentManager fragmentManager = getFragmentManager()

fragmentManager = fragmentManager.beginTransaction()

fragmentManager.beginTransaction() dovrà gestirsi il caricamento dei Fragment.

Essendo una Transazione. Se qualcosa va male c’è il CallBack. Se tutto invece va bene, c’è il Commit()

Con il Commit() siamo sicuri che la sequenza è andata a buon fine.

L’istanziazione avviene nell’onCreate(). All’inizio. Quando l’Activity sta iniziando anche lei a fare l’onCreate(). Inizio Ciclo di Vita dell’Activity.

Chiamata al setContentView(R.layout.main). Dove carichiamo il Layout principale

Nel Layout non ci sono più i Fragment → <fragment>

Ma c’è un LinearLayout → <LinearLayout> con 2 <FrameLayout>

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat 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"
tools:context=".MainActivity">

<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/frame_one">
</FrameLayout>

<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/frame_two">
</FrameLayout>

</androidx.appcompat.widget.LinearLayoutCompat>


<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat 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"
tools:context=".MainActivity">

<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/frame_one">
</FrameLayout>

<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:id="@+id/frame_two">
</FrameLayout>

</androidx.appcompat.widget.LinearLayoutCompat>


<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat 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"
tools:context=".MainActivity">

<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/frame_one">
</FrameLayout>

<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:id="@+id/frame_two">
</FrameLayout>

</androidx.appcompat.widget.LinearLayoutCompat>

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat 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"
tools:context=".MainActivity">

<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
class="com.example.frag_statico.NuovoFr"
android:id="@+id/frame_one">
</FrameLayout>

<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
class="com.example.frag_statico.nuovo"
android:id="@+id/frame_two">
</FrameLayout>

</androidx.appcompat.widget.LinearLayoutCompat>

Anche se i Fragment sono aggiunti in modo programmatico il Layout è comunque statico, avendo 2 pannelli che non cambiano.

Uno degli aspetti interessanti è quello di permettere alle transazioni di cambiare dinamicamente l’interfaccia utente.

Permettere: alle transazioni di cambiare dinamicamente l’interfaccia utente.

About Post Author

pasquale.clarizio

errore: Content is protected !!
Advertisment ad adsense adlogger