Autore Topic: due fragment e servizio che invia dati  (Letto 312 volte)

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
due fragment e servizio che invia dati
« il: 14 Novembre 2014, 21:05:45 CET »
0
Ciao,
attualmente nella mia applicazione ho un servizio binded e due activity differenti.
Adesso il servizio invia i dati attraverso il looper all'activity attiva.
Voglio passare aii fragment e pensavo di fare in questo modo :

Servizio legato all'activity, la quale invierà invierà il dato inizialmente al primo fragment e in un secondo momento al secondo fragment.

Quello che mi turba è la gestione dei fragment.
Per capirsi sono in concorrenza con l'activity principale o quando sono attivi i fragment l'activity non è per niente attiva a meno di esplicite chiamate dai fragment stessi ?

---------------------------------------------------------------------------------------------------------------

Intanto faccio un pò di pratica e ho provato a realizzare un activity che cambia il testo di un fragment :

Codice (Java): [Seleziona]
package rugani.tesi.animazione3d;

import android.app.Activity;
import android.os.Bundle;

public class FragmentTest extends Activity implements fra1.messaggio
{
        Thread mythread;
        fra1 frammento; //frammento di prova
        int i=0;
       
        @Override
        protected void onCreate(Bundle SaveInstanceState)
        {
                super.onCreate(SaveInstanceState);
                setContentView(R.layout.test);
        }
       
        public void imhere()
        {
                //funzione callback, quando viene eseguita significa che può partire il run !
                frammento=(fra1)getFragmentManager().findFragmentById(R.id.Avatar);
                frammento.pluto(i);
        }
       
        /*
        public void modificafragment()
        {
                //call a fragment's pluto function
               
                while(true)
                        {
                                try
                                {      
                                        Thread.sleep(1000);
                                        frammento.pluto(i);
                                }
                                catch(InterruptedException e)
                                {
                                        //do nothing
                                }
                       
                        }
                       
        }
        */

       
       
}

Codice (Java): [Seleziona]
package rugani.tesi.animazione3d;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class fra1 extends Fragment {
       
        View view;
        messaggio test;
       
           // onAttach
           @Override
           public void onAttach(Activity activity) {
              super.onAttach(activity);
              try {
                test = (messaggio) activity;
              } catch (ClassCastException e) {
                 throw new ClassCastException(activity.toString()+" deve essere implementata interface messaggio");
              }
           }
           
         @Override
           public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
           }
         
         @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {
                // Inflate the layout for this fragment
                        view=inflater.inflate(R.layout.fra1_layout, container, false);
                       
                return view;
            }
               
                /*
                 * IDEA
                 * Interfaccia di comunicazione tra fragment e activity
                 * il fragment dice all'activity di esserci e quindi di essere pronto a ricevere i dati
                 *
                 */

         
                public interface messaggio
                {
                        public void imhere();
                }
               
                @Override
                public void onStart()
                {
                        super.onStart();
                        test.imhere();  //call back, comunico all'activity che sono pronto.
                }
               
                public void pluto(int i)
                {      
                        TextView testo = (TextView)view.findViewById(R.id.tv1);
                        testo.setText(""+i);
                }
                               
}

Qui ho usato una interfaccia che consentiva di far si che solo quando il fragment è realmente caricato l'activity potesse settare la textview.

Ho questi dubbi :
- c'è altro modo per capire quando il fragment è realmente caricato in maniera che possa eseguire tranquillamente le funzioni del fragment dall'activity ?

- La funzione
Codice (Java): [Seleziona]
test.imhere();  //call back con cui comunico all'activity che il fragment è pronto.
l'ho fatta nel metodo OnStart() , perchè a ragionamento mi sembra il punto migliore per capire quando il fragment è avviato e pronto ad essere richiamato. Mi sbaglio ?

« Ultima modifica: 15 Novembre 2014, 02:33:56 CET da aeroxr1 »