IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

Problème Viewpager Update un fragment quand on swipe


Sujet :

Composants graphiques Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 26
    Points : 22
    Points
    22
    Par défaut Problème Viewpager Update un fragment quand on swipe
    Bonjour,

    J'ai actuellement un ViewPager avec 3 fragments.

    Lorsque je suis sur le fragment du milieu, je peux check 1 radiobutton parmis 3. Je stocke la valeur du check dans un sharedpreferences puis selon cette valeur je veux update un textview et un imageview sur le fragment de droite.

    Pour l'instant j'arrive à effectuer l'update uniquement sur un onClick(situé dans le fragment de droite) ou par un swipe mais je dois repasser par le fragment de gauche pour que l'update se fasse.

    J'aimerai savoir comment faire pour que l'update se fasse sur le swipe ou sur le check du radiobutton.

    Fragment activity :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    public class Commander extends FragmentActivity {
    	ViewPager Tab;
        TabPagerAdapter TabAdapter;
    	ActionBar actionBar;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.etapescommande);
     
            TabAdapter = new TabPagerAdapter(getSupportFragmentManager());
     
            Tab = (ViewPager)findViewById(R.id.pager);
            Tab.setOnPageChangeListener(
                    new ViewPager.SimpleOnPageChangeListener() {
                        @Override
                        public void onPageSelected(int position) {
     
                        	actionBar = getActionBar();
                        	actionBar.setSelectedNavigationItem(position);                  
                        	}
                    });
            Tab.setAdapter(TabAdapter);
     
            actionBar = getActionBar();
            //Enable Tabs on Action Bar
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
            ActionBar.TabListener tabListener = new ActionBar.TabListener(){
     
    			@Override
    			public void onTabReselected(android.app.ActionBar.Tab tab,
    					FragmentTransaction ft) {
    				// TODO Auto-generated method stub
     
    			}
     
    			@Override
    			 public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
     
    	            Tab.setCurrentItem(tab.getPosition());
    	        }
     
    			@Override
    			public void onTabUnselected(android.app.ActionBar.Tab tab,
    					FragmentTransaction ft) {
    				// TODO Auto-generated method stub
     
    			}};
    			//Add New Tab
    			actionBar.addTab(actionBar.newTab().setText("Ma commande").setTabListener(tabListener));
    			actionBar.addTab(actionBar.newTab().setText("Paiement").setTabListener(tabListener));
    			actionBar.addTab(actionBar.newTab().setText("Validation").setTabListener(tabListener));
     
        }
     
    }
    Fragment du milieu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    public class Paiement extends Fragment {
     
    	private RadioGroup radioPaiement;
     
    	 @Override
    	    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    	            Bundle savedInstanceState) {	 
    		    View paiement = inflater.inflate(R.layout.paiement, container, false);
     
    	        return paiement;
    	 	}
     
    	 @Override
    	 public void onActivityCreated(Bundle savedInstanceState) {
    			super.onActivityCreated(savedInstanceState);
    			View v= getView();
     
    			radioPaiement = (RadioGroup) v.findViewById(R.id.radioPaiement);
     
    			radioPaiement.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    				    @Override  
    				    public void onCheckedChanged(RadioGroup group, int checkedId) {
     
    				     RadioButton checkedRadioButton = (RadioButton)radioPaiement.findViewById(checkedId);
    				     int checkedIndex = radioPaiement.indexOfChild(checkedRadioButton);
     
    				     SharedPreferences app_preferencesP = PreferenceManager.getDefaultSharedPreferences(getActivity());
    			         SharedPreferences.Editor editorP = app_preferencesP.edit();
     
    			            String paiement = String.valueOf(checkedIndex);
    			            Log.i("Valeur radiobutton Paiement",paiement);
    			            editorP.putString("SavePaiement", paiement);
    			            editorP.commit();     
     
    				    }
    				   });	
    	 }	 
     
    }
    Fragment de droite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    public class ValidationCommande extends Fragment  {
     
    	Button ValidationCommande;
    	TextView ModeDePaiement;
    	ImageView ImagePaiement;
    	String Paiement,mail;
     
     
    		 @Override
    		 public View onCreateView(LayoutInflater inflater, ViewGroup container,
    		            Bundle savedInstanceState) {			 
    		        View validationcommande =  inflater.inflate(R.layout.validationcommande, container, false);	
     
    		        return validationcommande;
    		 }
     
    		 	@Override
    		 	public void onActivityCreated(Bundle savedInstanceState) {
    				super.onActivityCreated(savedInstanceState);
    				View v= getView();
     
    				ModeDePaiement = (TextView)v.findViewById(R.id.RecapPaiement);
     
    				ImagePaiement = (ImageView)v.findViewById(R.id.RecapPaiementImage);
     
     
    	        ValidationCommande = (Button)v.findViewById(R.id.ButtonValidationCommande);
     
                    ValidationCommande.setOnClickListener(new OnClickListener() {                       
                            @Override
                            public void onClick(View v) {
     
                            	AlertDialog.Builder builder2 = new AlertDialog.Builder(getActivity());
                            	builder2.setTitle("Confirmation");
                            	builder2.setMessage("Valider la commande ?");
     
                            	builder2.setNegativeButton("Non", new DialogInterface.OnClickListener() {					
                            		@Override
                            		public void onClick(DialogInterface arg0, int arg1) {
                            			// TODO Auto-generated method stub  
                            			SharedPreferences app_preferences2 = PreferenceManager.getDefaultSharedPreferences(getActivity());
                            			mail = app_preferences2.getString("key", "null");
                            	        Paiement = app_preferences2.getString("SavePaiement", "null");
                            	        Log.i("SavePaiement",Paiement);
                            			if(Paiement.equals("null")) {
                        					ModeDePaiement.setText(null);
                        		        	ImagePaiement.setImageResource(0);	
                        				}			
                        				else if(Paiement.equals("0")) {
                        		        	ModeDePaiement.setText("Carte bancaire");
                        		        	ImagePaiement.setImageResource(R.drawable.modedepaiement);
                        		        }
                        				else if(Paiement.equals("1")) {
                        		        	ModeDePaiement.setText("Compte Paypal");
                        		        	ImagePaiement.setImageResource(R.drawable.paypal);
                        		        }
                        		        else if(Paiement.equals("2")){
                        		        	ModeDePaiement.setText("Chèque");
                        		        	ImagePaiement.setImageResource(R.drawable.cheque);
                        		        } 
     
                  ............................
     
                            }
                    });
    		 }
    Merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 129
    Points : 144
    Points
    144
    Par défaut
    Si tu utilise Android Studio, il y a un exemple tout fait avec le viewPager

    Et dans la class qui extends de FragmentPagerAdapter dans la méthode qui retourne le fragment suivant la position tu fait un monFragment.newInstance();


    Tu dois crée une méthode newInstance dans chaque fragment et celle-ci comme son nom l'indique sera mise à jour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public Fragment newInstance()
    {
    return new myFragment()
    }

    Comme ça tes fragments sont mis à jours à chaque fois.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    J'ai fait ce que tu as dit pour chaque fragment et pour le FragmentStatePagerAdapter mais j'ai toujours le même problème, mon sharedpreference récupère la valeur de mon check que si je repasse par le fragment de gauche...


    FragmentStatePagerAdapter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public class TabPagerAdapter extends FragmentStatePagerAdapter {
        public TabPagerAdapter(FragmentManager fm) {
    		super(fm);
    		// TODO Auto-generated constructor stub
    	}
     
    	@Override
    	public Fragment getItem(int i) {
    		switch (i) {
            case 0:
                //Fragment pour Ma commande
                return MaCommande.newInstance();
            case 1:
               //Fragment pour le paiement
                return Paiement.newInstance();
            case 2:
                //Fragment pour le récapitulatif
                return ValidationCommande.newInstance();
            }
    		return null;
     
    	}
     
    	@Override
    	public int getCount() {
    		// TODO Auto-generated method stub
    		return 3; //No of Tabs
    	}
     
     
        }

    Fragment de droite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    public class ValidationCommande extends Fragment  {
     
    	Button ValidationCommande;
    	TextView ModeDePaiement;
    	ImageView ImagePaiement;
    	String Paiement,mail;
     
    		public static ValidationCommande newInstance()
    		{
    		return new ValidationCommande();
    		}
     
    		 @Override
    		 public View onCreateView(LayoutInflater inflater, ViewGroup container,
    		            Bundle savedInstanceState) {			 
    		        View validationcommande =  inflater.inflate(R.layout.validationcommande, container, false);	
     
    		        SharedPreferences app_preferences2 = PreferenceManager.getDefaultSharedPreferences(getActivity());
        			mail = app_preferences2.getString("key", "null");
        	        Paiement = app_preferences2.getString("SavePaiement", "null");
        	        Log.i("SavePaiement",Paiement);
     
        	        ModeDePaiement = (TextView)validationcommande.findViewById(R.id.RecapPaiement);
     
    				ImagePaiement = (ImageView)validationcommande.findViewById(R.id.RecapPaiementImage);
     
        			if(Paiement.equals("null")) {
    					ModeDePaiement.setText(null);
    		        	ImagePaiement.setImageResource(0);	
    				}			
    				else if(Paiement.equals("0")) {
    		        	ModeDePaiement.setText("Carte bancaire");
    		        	ImagePaiement.setImageResource(R.drawable.modedepaiement);
    		        }
    				else if(Paiement.equals("1")) {
    		        	ModeDePaiement.setText("Compte Paypal");
    		        	ImagePaiement.setImageResource(R.drawable.paypal);
    		        }
    		        else if(Paiement.equals("2")){
    		        	ModeDePaiement.setText("Chèque");
    		        	ImagePaiement.setImageResource(R.drawable.cheque);
    		        } 
    		        return validationcommande;
    		 }
     
    		 	@Override
    		 	public void onActivityCreated(Bundle savedInstanceState) {
    				super.onActivityCreated(savedInstanceState);
    				View v= getView();				
     
    	        ValidationCommande = (Button)v.findViewById(R.id.ButtonValidationCommande);
     
                    ValidationCommande.setOnClickListener(new OnClickListener() {                       
                            @Override
                            public void onClick(View v) {

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Premièrement : Les conventions Java.
    • Classes en UpperCamelCase : débutent par une majuscule, suivi de minuscules, la première lettre de chaque mot est une majuscule.
    • Variables et méthodes en lowerCamelCase : débutent par une minuscule, première lettre de chaque mot en majuscule.
    • Constantes : écrites en majuscules avec des tirets bas en séparateur (seul endroit où ceux-ci sont autorisés).

    Les respecter aide à la relecture et à la compréhension.

    Ensuite, le fonctionnement que tu présentes est le fonctionnement normal du ViewPager => il garde en mémoire le Fragment courant (le contraire serait étonnant ) et le Fragment précédent.

    Au moment où tu passes du premier au deuxième, les deux sont en mémoires. Quand tu modifies le second, puis reviens sur le premier, leur état est conservé.
    Au moment où tu passes par le troisième Fragment, le premier est détruit. Quand tu repasses dessus, il est recréé.

    Passer par la pseudo-factory newInstance ne change rien au problème, c'est un autre moyen de création de Fragment (plutôt que passer par un new MonFragment()).

    Ici, la solution est soit de forcer la recréation de Fragment (la mauvaise solution), soit de mettre à jour l'affichage du second Fragment à partir du premier (la bonne).

    Tu initialises ton UI dans le onCreateView, ce qui est normal. Par contre, tu changes son état alors que celle-ci est créée, mais tu ne lui signifie pas "eyh, ton état a changé, il faut que tu te mettes à jour !".

    Pour se faire, il va falloir passer par l'Activité hébergeant les Fragments.
    Le flux est : Fragment1 => Activité responsable => Fragment2
    Je n'ai pas le temps de faire un exemple de code (désolé), mais voici la documentation permettant d'y arriver : http://developer.android.com/guide/c...ngWithActivity
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    J'ai essayé par rapport à la documentation, mais j'obtiens un NullPointerException
    soit :

    FragmentActivity :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    public class Commander extends FragmentActivity implements OnPaiementSelectedListener {
    	ViewPager Tab;
        TabPagerAdapter TabAdapter;
    	ActionBar actionBar;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.etapescommande);
     
            TabAdapter = new TabPagerAdapter(getSupportFragmentManager());
     
            Tab = (ViewPager)findViewById(R.id.pager);
            Tab.setOnPageChangeListener(
                    new ViewPager.SimpleOnPageChangeListener() {
                        @Override
                        public void onPageSelected(int position) {
     
                        	actionBar = getActionBar();
                        	actionBar.setSelectedNavigationItem(position);                  
                        	}
                    });
            Tab.setAdapter(TabAdapter);
     
            actionBar = getActionBar();
            //Enable Tabs on Action Bar
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
            ActionBar.TabListener tabListener = new ActionBar.TabListener(){
     
    			@Override
    			public void onTabReselected(android.app.ActionBar.Tab tab,
    					FragmentTransaction ft) {
    				// TODO Auto-generated method stub
     
    			}
     
    			@Override
    			 public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
     
    	            Tab.setCurrentItem(tab.getPosition());
    	        }
     
    			@Override
    			public void onTabUnselected(android.app.ActionBar.Tab tab,
    					FragmentTransaction ft) {
    				// TODO Auto-generated method stub
     
    			}};
    			//Add New Tab
    			actionBar.addTab(actionBar.newTab().setText("Ma commande").setTabListener(tabListener));
    			actionBar.addTab(actionBar.newTab().setText("Paiement").setTabListener(tabListener));
    			actionBar.addTab(actionBar.newTab().setText("Validation").setTabListener(tabListener));
     
        }
     
    	@Override
    	public void onPaiementSelected(String Paiement) {
    		// TODO Auto-generated method stub
    		return;
    	}
    Fragment du milieu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    public class Paiement extends Fragment {
     
    	private RadioGroup radioPaiement;
     
    	OnPaiementSelectedListener mListener;
     
     
    	public interface OnPaiementSelectedListener {
            public void onPaiementSelected(String Paiement);
        }
     
     
    	 @Override
    	    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    	            Bundle savedInstanceState) {	 
    		    View paiement = inflater.inflate(R.layout.paiement, container, false);
     
    	        return paiement;
    	 	}
     
    	 @Override
    	 public void onActivityCreated(Bundle savedInstanceState) {
    			super.onActivityCreated(savedInstanceState);
    			View v= getView();
     
    			radioPaiement = (RadioGroup) v.findViewById(R.id.radioPaiement);
     
    			radioPaiement.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    				    @Override  
    				    public void onCheckedChanged(RadioGroup group, int checkedId) {
     
    				     RadioButton checkedRadioButton = (RadioButton)radioPaiement.findViewById(checkedId);
    				     int checkedIndex = radioPaiement.indexOfChild(checkedRadioButton);
     
    				     SharedPreferences app_preferencesP = PreferenceManager.getDefaultSharedPreferences(getActivity());
    			         SharedPreferences.Editor editorP = app_preferencesP.edit();
     
    			            String paiement = String.valueOf(checkedIndex);
    			            Log.i("Valeur radiobutton Paiement",paiement);
    			            editorP.putString("SavePaiement", paiement);
    			            editorP.commit();     
     
     
    			            mListener.onPaiementSelected(paiement);
     
     
    				    }
    				   });	
     
    	 }	 
     
    }
    Fragment de droite (où j'obtiens un NullPointerException) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    public class ValidationCommande extends Fragment  {
     
    	Button ValidationCommande;
    	TextView ModeDePaiement;
    	ImageView ImagePaiement;
    	String Paiement,mail;
     
    	 	OnPaiementSelectedListener mListener;
     
    	    @Override
    	    public void onAttach(Activity activity) {
    	        super.onAttach(activity);
    	        try {
    	            mListener = (OnPaiementSelectedListener) activity;
     
    	            SharedPreferences app_preferences2 = PreferenceManager.getDefaultSharedPreferences(getActivity());
        			mail = app_preferences2.getString("key", "null");
        	        Paiement = app_preferences2.getString("SavePaiement", "null");
        	        Log.i("SavePaiementV",Paiement);
     
        	        ModeDePaiement = (TextView)getActivity().findViewById(R.id.RecapPaiement);
     
    				ImagePaiement = (ImageView)getActivity().findViewById(R.id.RecapPaiementImage);
     
        			if(Paiement.equals("null")) {
    					ModeDePaiement.setText(null);
    		        	ImagePaiement.setImageResource(0);	
    				}			
    				else if(Paiement.equals("0")) {      //NullPointerException ICI
    		        	ModeDePaiement.setText("Carte bancaire");
    		        	ImagePaiement.setImageResource(R.drawable.modedepaiement);
    		        }
    				else if(Paiement.equals("1")) {
    		        	ModeDePaiement.setText("Compte Paypal");
    		        	ImagePaiement.setImageResource(R.drawable.paypal);
    		        }
    		        else if(Paiement.equals("2")){
    		        	ModeDePaiement.setText("Chèque");
    		        	ImagePaiement.setImageResource(R.drawable.cheque);
    		        } 
     
    	        } catch (ClassCastException e) {
    	            throw new ClassCastException(activity.toString() + " must implement OnPaiementSelectedListener");
    	        }
    	    }
     
     
     
    		 @Override
    		 public View onCreateView(LayoutInflater inflater, ViewGroup container,
    		            Bundle savedInstanceState) {			 
    		        View validationcommande =  inflater.inflate(R.layout.validationcommande, container, false);	
     
    		        return validationcommande;
    		 }
     
    		 	@Override
    		 	public void onActivityCreated(Bundle savedInstanceState) {
    				super.onActivityCreated(savedInstanceState);
    				View v= getView();	
     
                                   .......................

  6. #6
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Les conventions...

    Si tu obtiens une exception, merci de nous communiquer l'intégralité de la stacktrace, ainsi que les lignes afférentes. Si tu ne sais pas lire une stacktrace, ce n'est pas un problème, il suffit de l'indiquer en plus
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    02-03 10:46:12.534: E/AndroidRuntime(1237): FATAL EXCEPTION: main
    02-03 10:46:12.534: E/AndroidRuntime(1237): Process: com.example.test, PID: 1237
    02-03 10:46:12.534: E/AndroidRuntime(1237): java.lang.NullPointerException
    02-03 10:46:12.534: E/AndroidRuntime(1237): at com.example.test.ValidationCommande.onAttach(ValidationCommande.java:62)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:883)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.support.v4.view.ViewPager$3.run(ViewPager.java:244)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.view.Choreographer.doCallbacks(Choreographer.java:574)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.view.Choreographer.doFrame(Choreographer.java:543)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.os.Handler.handleCallback(Handler.java:733)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.os.Handler.dispatchMessage(Handler.java:95)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.os.Looper.loop(Looper.java:136)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at android.app.ActivityThread.main(ActivityThread.java:5017)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at java.lang.reflect.Method.invokeNative(Native Method)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at java.lang.reflect.Method.invoke(Method.java:515)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    02-03 10:46:12.534: E/AndroidRuntime(1237): at dalvik.system.NativeStart.main(Native Method)

  8. #8
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Oh, je n'avais pas vu que tu avais indiqué l'endroit de la NPE dans ton message précédent. Toutes mes excuses pour ça.

    Tu es sûr que la ligne 62 ne correspond pas plutôt au test d'avant à savoir Paiement.equals("null") ?

    Pour tester la nullité d'un objet, ce n'est pas ainsi que l'on fait en Java
    Là, tu testes si ta String Paiement possède une valeur, celle-ci étant la chaîne "null".
    Pour ce test, il faut faire paiement == null
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    Le NullPointer est sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ModeDePaiement = (TextView)getView().findViewById(R.id.RecapPaiement);
    donc surment également sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ImagePaiement=(ImageView)getView().findViewById(R.id.RecapPaiementImage);

    C'est peut être le getView() qui prend en compte le layout du fragment du milieu et non celui de droite ?
    Ou bien il ne faut pas que je les déclare dans le onAttach() de mon fragment de droite ?


    02-03 11:40:55.404: E/AndroidRuntime(1344): FATAL EXCEPTION: main
    02-03 11:40:55.404: E/AndroidRuntime(1344): Process: com.example.test, PID: 1344
    02-03 11:40:55.404: E/AndroidRuntime(1344): java.lang.NullPointerException
    02-03 11:40:55.404: E/AndroidRuntime(1344): at com.example.test.ValidationCommande.onAttach(ValidationCommande.java:62)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:883)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.support.v4.view.ViewPager$3.run(ViewPager.java:244)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.view.Choreographer.doCallbacks(Choreographer.java:574)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.view.Choreographer.doFrame(Choreographer.java:543)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.os.Handler.handleCallback(Handler.java:733)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.os.Handler.dispatchMessage(Handler.java:95)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.os.Looper.loop(Looper.java:136)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at android.app.ActivityThread.main(ActivityThread.java:5017)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at java.lang.reflect.Method.invokeNative(Native Method)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at java.lang.reflect.Method.invoke(Method.java:515)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    02-03 11:40:55.404: E/AndroidRuntime(1344): at dalvik.system.NativeStart.main(Native Method)

  10. #10
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Ce n'est pas clair du tout.

    Si je cherche l'assignement de ModeDePaiement, je trouve dans le cas fourni :
    1ère version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ModeDePaiement = (TextView)v.findViewById(R.id.RecapPaiement);
    2ème version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ModeDePaiement = (TextView)validationcommande.findViewById(R.id.RecapPaiement);
    3ème version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ModeDePaiement = (TextView)getActivity().findViewById(R.id.RecapPaiement);
    4ème version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ModeDePaiement = (TextView)getView().findViewById(R.id.RecapPaiement);
    Tu ne peux normalement pas avoir de NPE sur ces lignes, au pire une ClassCastException. La seule raison pour laquelle tu aurais une NPE ici serait que ta vue soit null. Regarde en debug ou met en log, mais ça ne devrait normalement pas être le cas.

    Donc, de mon coté, je ne comprends strictement rien a ce que tu fais, et j'ai l'impression que tu tentes des choses au hasard en espérant que ça passe.

    A priori, tu te trouve dans un Fragment, donc modeDePaiement devrait être un item graphique du Fragment, donc un View#findViewById devrait fonctionner (sauf si tu es dans le cas d'un Fragment sans interface).

    Tu cherches à mettre à jour un autre Fragment du ViewPager. Comme le lien te l'indique, tu dois passer par l'Activity pour ça.
    Dans l'action fait par ton Fragment1, tu demandes gentiment à l'activité de mettre à jour le Fragment2. Dans l'activité, tu tentes de reprendre le Fragment, et s'il existe, tu lui demande gentiment de mettre à jour l'item graphique.

    Ps : toujours la même remarque sur les conventions, merci de faciliter le boulot des bénévoles.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

Discussions similaires

  1. [MySQL] problème requête UPDATE
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 23/10/2005, 18h28
  2. problème de Update
    Par cyrill.gremaud dans le forum ASP
    Réponses: 7
    Dernier message: 29/08/2005, 20h58
  3. [C#] [Oracle] Problème d'Update
    Par _Air_ dans le forum Windows Forms
    Réponses: 12
    Dernier message: 06/04/2005, 13h56
  4. Problème requete update
    Par krfa1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/03/2005, 08h47
  5. problème pour updater une BD
    Par yoda_style dans le forum ASP
    Réponses: 6
    Dernier message: 17/03/2005, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo