2016-06-28 4 views
0

J'ai MyFragment classe qui reçoit des intentions de diffusion -Set et obtenir les méthodes ne fonctionnent pas correctement

if(intent.getAction().equals(BroadcastHelper.DEPARTURE_TIME)){ 
       Bundle args = intent.getExtras(); 
       if (args != null) { 

        departure_time = args.getInt("Departure"); 
        Log.d("hi","vehicle viv0" + departure_time); 

        setDepTime(departure_time); 
       } 
      } 
      else if(intent.getAction().equals(BroadcastHelper.ARRIVAL_TIME)){ 
       Bundle args = intent.getExtras(); 
       if (args != null) { 
        arrival_time = args.getInt("Arrival"); 
        Log.d("hi","vehicle viv1" + arrival_time); 

        setArrivalTime(arrival_time); 
       } 
      } 
     } 
    }; 

    //public method to set the time variable 
    public void setArrivalTime(int arrival_time){ 
     Log.d("hi","vehicle viv2" + arrival_time); 
     this.arrival_time = arrival_time; 
     Log.d("hi","vehicle viv3" + this.arrival_time); 
    } 

    //public method to set the time variable 
    public void setDepTime(int departure_time){ 
     this.departure_time = departure_time; 
    } 

    public int getArrivalTime(){ 
     Log.d("hi","vehicle viv5" + this.arrival_time); 
     return this.arrival_time; 
    } 

    public int getDepTime(){ 
     return this.departure_time; 
    } 

Je suis en train de la valeur de arrival_time et departure_time comme ci-dessus. Maintenant, de MyOwn classe, je fais ces -

@Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
    .......... 
    Button okButton = (Button) rootView.findViewById(R.id.myxml); 
      okButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        MyFragment mFragment = new MyFragment(); 
        int depi = mFragment.getDepTime(); 
       } 
      }); 

      MyFragment mFragment = new StopListFragment(); 
      int arri = mFragment.getArrivalTime(); 
      Log.d("hi","vehicle viv6" + arri); 
    } 

Quand j'utilise getArrivalTime(), je reçois 0. Les journaux sont -

D/hi: vehicle viv1 = 13012 
D/hi: vehicle viv2 = 13012 
D/hi: vehicle viv3 = 13012 
D/hi: vehicle viv5 = 0 
D/hi: vehicle viv6 = 0 

Y at-il un problème?

Répondre

-1

Étant donné que la classe "MyOwn" crée un nouvel objet du fragment, la valeur initialisée par défaut de la variable "arrival_time" sera renvoyée.

+0

Ok, comment puis-je passer l'instance de l'objet fragment puis à la classe MyOwn – Samuel909

+0

, essayez de définir le paramètre 'arrival_time & departure_time' comme étant 'static'. – sJy

+0

cool :) ça a marché. Je vous remercie – Samuel909

0

Vous appelez getDepTime() sur une nouvelle instance du fragment, qui ne peut évidemment pas de données puisque vous venez de créer, il

+0

Oh ... Alors, comment faire? – Samuel909

+0

est votre méthode onCreateDialog à l'intérieur du fragment? – Apperside

+0

onCreateDialog est dans MyOwn Class ... ce n'est pas une classe de fragment – Samuel909

0
MyFragment mFragment = new MyFragment(); 

@Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
     .......... 
     Button okButton = (Button) rootView.findViewById(R.id.myxml); 
       okButton.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         int depi = mFragment.getDepTime(); 
        } 
       }); 

       int arri = mFragment.getArrivalTime(); 
       Log.d("hi","vehicle viv6" + arri); 
     } 

Vous utilisez setter et getter sur un différents objets du classe. Essayez d'exclure l'initialisation de votre fragment à la valeur globale et voyez comment cela fonctionne. Voir l'exemple ci-dessus.

+0

J'ai essayé mais c'est toujours pareil. 0 toujours – Samuel909