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.

  1. Attacca l' attività - onAttach (Attività)
  2. Crea frammento - onCreate (pacchetto)
  3. Crea vista - onCreateView (LayoutInflater, ViewGroup, Bundle)
  4. Creazione di attività - onActivityCreated (Bundle)
  5. Visualizza stato ripristinato - onViewStateRestored (Bundle)
  6. Reso visibile all'utente - onStart ()
  7. inizio dell'interazione dell'utente - onResume ()
  8. pausa dell'interazione dell'utente - onPause ()
  9. Reso invisibile all'utente - onStop ()
  10. Distruzione vista - onDestroyView ()
  11. Distruggi il frammento - onDestroy ()
  12. 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

  1. DialogFragment - Per visualizzare la finestra di dialogo mobile
  2. ListFragment - Per visualizzare l'elenco di elementi
  3. PreferenceFragment - Utile per creare attività di impostazione

Riferimenti

  1. https://developer.android.com/guide/components/fragments.html
  2. https://developer.android.com/reference/android/app/Fragment.html

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();
    }
}  


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow