android-fragments Tutorial
Iniziare con i frammenti di Android
Ricerca…
Osservazioni
I frammenti sono componenti molto importanti dell'interfaccia utente nelle app Android. Sono stati introdotti per primi in API Android 3.0 (Honeycomb).
Comprensione del paradigma del design di Frammenti
Sono stati introdotti frammenti per supportare principalmente UI modulare e flessibile su dispositivi a schermo grande come i tablet.
I frammenti sono gestiti da un'attività. Di solito ogni frammento rappresenta una porzione di uno schermo. Ci può essere più di un frammento in un'attività. I frammenti possono anche essere chiamati sotto-attività . Quando si aggiunge un frammento come parte del proprio layout di attività, esso vive in un ViewGroup all'interno della gerarchia di visualizzazione dell'attività e il frammento definisce il proprio layout di visualizzazione.
CICLO VITALE
Proprio come un'attività, anche i frammenti hanno un ciclo di vita. Un frammento viene notificato per i seguenti eventi.
- Attacca l' attività - onAttach (Attività)
- Crea frammento - onCreate (pacchetto)
- Crea vista - onCreateView (LayoutInflater, ViewGroup, Bundle)
- Creazione di attività - onActivityCreated (Bundle)
- Visualizza stato ripristinato - onViewStateRestored (Bundle)
- Reso visibile all'utente - onStart ()
- inizio dell'interazione dell'utente - onResume ()
- pausa dell'interazione dell'utente - onPause ()
- Reso invisibile all'utente - onStop ()
- Distruzione vista - onDestroyView ()
- Distruggi il frammento - onDestroy ()
- Distaccati da un'attività - onDetach ()
Come programmatore, dovresti sovrascrivere vari metodi di callback del ciclo di vita, in genere implementiamo i metodi onCreate (), onCreateView () e onPause ().
Sottoclassi di frammento
- DialogFragment - Per visualizzare la finestra di dialogo mobile
- ListFragment - Per visualizzare l'elenco di elementi
- PreferenceFragment - Utile per creare attività di impostazione
Riferimenti
Aggiungere frammenti
Aggiunta di un frammento staticamente
File: activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<fragment
android:id="@+id/fragment2"
android:name="com.example.fragmentexample.Fragment2"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
/>
<fragment
android:id="@+id/fragment1"
android:name="com.example.fragmentexample.Fragment1"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
/>
</LinearLayout>
File: fragment1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#00ff00"
>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="fragment frist"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
File: fragment2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#0000ff"
>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Second Fragment"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
File: MainActivity.java
package com.example.fragmentexample;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
File: Fragment1.java
package com.example.fragmentexample;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment1,container, false);
}
}
File: Fragment2.java
package com.example.fragmentexample;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment2 extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment2,container, false);
}
}
Aggiunta di un frammento dinamicamente
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<FrameLayout
android:id="@+id/container1"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
/>
<FrameLayout
android:id="@+id/container2"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
/>
</LinearLayout>
FrameLayout funziona come contenitore dei frammenti.
MainActivity class
File: MainActivity.java
package com.example.fragmentexample;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadFragment(this, R.id.container1,new Fragment1(),"fragment1");
loadFragment(this, R.id.container2,new Fragment2(),"fragment2");
}
public static void loadFragment(Activity activity, int containerId, Fragment fragment, String tag)
{
activity.getSupportFragmentManager().beginTransaction().
replace(containerId, fragment,tag).commitAllowingStateLoss();
}
}