Sök…


Anmärkningar

Fragment är mycket viktiga komponenter i användargränssnittet i Android-appar. De introducerades först i Android 3.0 (Honeycomb) API.


Att förstå designparadigmet för fragment

Fragment infördes för att främst stödja modulär och flexibel användargränssnitt på storskärmsenheter såsom tabletter.

Fragment hanteras av en aktivitet. Vanligtvis representerar varje fragment en del av en skärm. Det kan finnas mer än ett fragment i en aktivitet. Fragment kan också kallas underaktiviteter . När du lägger till ett fragment som en del av din aktivitetslayout lever det i en ViewGroup i aktivitetens visningshierarki och fragmentet definierar sin egen vylayout.


LIVSCYKEL

Precis som en aktivitet har fragment också en livscykel. Ett fragment meddelas för följande händelser.

  1. Bli knuten till aktivitet - onAttach (Aktivitet)
  2. Skapa fragment - onCreate (Bundle)
  3. Skapa vy - onCreateView (LayoutInflater, ViewGroup, Bundle)
  4. Aktivitetsskapande - onActivityCreated (Bundle)
  5. Visa tillstånd återställt - onViewStateRestored (Bundle)
  6. Synliggjort för användaren - onStart ()
  7. början på användarinteraktion - onResume ()
  8. paus för användarinteraktion - onPause ()
  9. Gjord osynlig för användaren - onStop ()
  10. På förstörelse av synen - onDestroyView ()
  11. Destroy fragment - onDestroy ()
  12. Lös dig loss från en aktivitet - onDetach ()

Som programmerare bör du åsidosätta olika återuppringningsmetoder för livscykeln, vanligtvis implementerar vi onCreate (), onCreateView () och onPause () metoder.


Underklasser av fragment

  1. DialogFragment - För att visa den flytande dialogen
  2. ListFragment - För att visa en lista med objekt
  3. PreferenceFragment - användbart för att skapa inställningsaktivitet

referenser

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

Lägga till fragment

Lägga till ett fragment statiskt

Fil: 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>  

Fil: 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>  

Fil: 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>

Fil: 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);  
    }  
}  

Fil: 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);  
    }  
  
}  

Fil: 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);  
    }  
  
}  

Lägga till ett fragment dynamiskt

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 fungerar som fragmentbehållare.

MainActivity klass

Fil: 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow