Les Fragments sur Android (Code)

 

Programmation avec les fragments du SDK Android.

 

  • Création des Fragments avec leur Layouts dans leur classe respective.
  • Ajout des Fragments dans l’activité parente (hôte).

 

On va utiliser ici la bibliothèque de compatibilité, qui permet d’utiliser les fragments sur d’anciennes versions d’Android.

 

 

Quand Eclipse vous demandera l’importation d’une librairie, faite attention à toujours choisir celle de la bibliothèque de compatibilité. Il ne faut pas mélanger les 2.

import android.support.v4.app.Fragment;   –> Bibliothèque de compatibilité. import android.app.Fragment; –> Bibliothèque standard que nous n’utiliserons pas ici.  

La page officiel: Fragments Android Developer 

 

 

 Création des Fragments

 

  Nous allons utiliser 2 fragments. Créons nos 2 classes, Fragment1.java et Fragment2.java.

 

package com.example.tutofragmentcode;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;


public class Fragment1 extends Fragment {
	
	
	
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
    	
    	//root layout du fragment 
		RelativeLayout rlayout = new RelativeLayout(getActivity());
		LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0);
		llp.weight = 1;
		rlayout.setLayoutParams(llp);
		rlayout.setBackgroundColor(0xFF939393);
		
			//TextView tv
			TextView tv = new TextView(getActivity());
			RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
			rlp.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
			tv.setLayoutParams(rlp);
			tv.setText("Fragment 1");
			tv.setBackgroundColor(0xff0099CC);
			rlayout.addView(tv);
    	
		return rlayout;

    }
}


Fragment1.java
package com.example.tutofragmentcode;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;


public class Fragment2 extends Fragment {
	
	
	
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
   
    	//Layout de base du fragment 2
    	RelativeLayout rlayout = new RelativeLayout(getActivity());
		LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0);
		llp.weight = 2; //poids de 2
		rlayout.setLayoutParams(llp);
		rlayout.setBackgroundColor(0xFFD0D0D0);
		
			//TextView tv
			TextView tv = new TextView(getActivity());
			RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
			rlp.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
			tv.setLayoutParams(rlp);
			tv.setText("Fragment 2");
			tv.setBackgroundColor(0xffCC0000);
			rlayout.addView(tv);
    	
		return rlayout;

    }
}
fragment2.java

 

Si Eclipse ne reconaît pas le android.support.v4.app.Fragment, vérifié que le fichier android-support-v4.jar du repertoire libs est bien inclu dans le Build Path (sinon clic droit sur le fichier -> Build Path -> Add To Build Path).    

 

Intégration des Fragments dans l’Activité

 

L’activité qui va héberger nos fragments doit dépendre de FragmentActivity (de la librairie support V4).

 

package com.example.tutofragmentcode;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.os.Bundle;
import android.widget.LinearLayout;

public class MainActivity extends FragmentActivity {

	private Fragment1 frag_1 = null;
	private Fragment2 frag_2 = null;
	
	private LinearLayout ln = null;
	private final int ROOT_ID = 4500; //valeur arbitraire
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
				
		//setContentView(R.layout.activity_main);
			  
			ln = new LinearLayout(this);
			LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
			ln.setLayoutParams(llp);
			ln.setId(4500);
			ln.setOrientation(LinearLayout.VERTICAL);
		
			setContentView(ln);
		
		InstanciateFrags();
		AddFrags();
	}

	
	private void InstanciateFrags()
	{
		frag_1 = new Fragment1();
		frag_2 = new Fragment2();
	}
	

	private void AddFrags()
	{
		 FragmentManager fm = getSupportFragmentManager(); // Begin a fragment transaction.
		 FragmentTransaction ft = fm.beginTransaction();
		
		 ft.add(ROOT_ID, frag_1);
		 ft.add(ROOT_ID, frag_2);
		   
		 ft.commit(); 	    // Commit changes.
		
	}
	
	
	
}
MainActivity.java

 

Avec le premier Fragment1à 1/3 de la hauteur et le 2ème à 2/3 de la hauteur (attribut weight), on obtient ceci :  

 

tutaux_fragments_resultat1  

 

Si vous avez des erreurs à la compilation Bien vérifié que dans les propriétés du projet, menu Java Build Path onglet Order and Export, la ligne android-support-v4.jar soit coché.  

 

fragments_tutaux_support_v4

 


Dmitry Baranovskiy – The JavaScriptCode – source de l’image

 

Please follow and like us:
7

Leave a Comment

Social media & sharing icons powered by UltimatelySocial