Utilizzo di Otto nella class di Fragment e Service

Ho un RecyclerView all'interno di una class di Fragment e ho una class di servizio where ho voluto aggiungere l'elemento al mio RecyclerView. Il problema è che non ho alcuna idea su come posso eventualmente farlo. Quindi ho chiesto e qualcuno mi ha detto di usare Otto . E adesso sono delle scorte perché non funziona. Forse c'è qualcosa che non va nel mio codice, non lo so, questa è la prima volta che ho usato Otto .

Così implemento la mia class di frammento

  • Esegui un'azione con il field personalizzato del contatto
  • Reimposta i maxlines di text di Android
  • Ottenere il fuso orario locale del dispositivo
  • RecyclerView wrap_content
  • Imansible caricare l'applicazione Android sul dispositivo (vasi smussati)
  • Android - L'applicazione senza attività di LAUNCHER non funziona
  •  public static class MyFragment extends Fragment { RecyclerView recyclerView; LinearLayoutManager linearLayoutManager; static TheRecyclerAdapter theRecyclerAdpater; private List<TheData> theDataList; public static Bus bus = new Bus(ThreadEnforcer.MAIN); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.online_devices, container, false); recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); linearLayoutManager = new LinearLayoutManager(getActivity().getBaseContext()); recyclerView.setLayoutManager(linearLayoutManager); recyclerView.setHasFixedSize(true); theDataList = new ArrayList<>(); theRecyclerAdpater = new TheRecyclerAdapter(getActivity().getBaseContext(), theDataList); recyclerView.setItemAnimator(new DefaultItemAnimator()); recyclerView.setAdapter(theRecyclerAdpater); bus.register(this); //I already register my fragment getActivity().startService(new Intent(getActivity(),MyService.class)); //I call the Service return view; } //I already Subscribe, I am expecting to execute this Function but nothings happened @Subscribe public void getMessage(String s) { TheData a = new TheData(s); theDataList.add(a); theRecyclerAdpater.notifyDataSetChanged(); } } 

    E questa è la mia class di servizio

     public class ServerHelperService extends Service { public static Bus bus = new Bus(ThreadEnforcer.MAIN); @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate(){ bus.post("a"); //This where I'm expecting to call the getMessage function in my fragment } @Override public int onStartCommand(Intent intent, int flags, int startId) { return START_NOT_STICKY; } @Override public void onDestroy() { super.onDestroy(); } } 

    Qualcuno ha un'idea perchè non funziona?

  • Leggete i dati da sqlite where il nome della colonna contiene spazi in android
  • Gallery ImageAdapter convertView è sempre nullo
  • Quali font sono disponibili su Android?
  • API Google Places: numero di risultati
  • Creazione di un metodo utilizzando Haversine Formula, Android V2
  • Riavviare il servizio anche se l'applicazione è bloccata in forza e continuare a eseguire il servizio in background anche dopo aver chiuso l'applicazione Come?
  • One Solution collect form web for “Utilizzo di Otto nella class di Fragment e Service”

    In primo luogo, è necessario cogliere il concetto di bus degli events . In Otto doc , è ansible vedere solo dettagli tecnici su come funziona il bus di events nel text. Quindi, per motivi di spiegazione, prendiamo in prestito da EventBus . Qui le immagini che spiegano come funziona il bus degli events: Descrizione di EventBus Ecco 3 parti:

    1. Produttore, produttore dell'evento.
    2. Evento, l'evento che accade quale produttore submit.
    3. Sottoscrittore, il sublicente all'evento che riceve l'evento.

    Produttore può submit solo evento. Quindi devi submit solo un evento. Naturalmente puoi aggiungere "payload" all'evento. Quindi, per submit l'evento, è ansible utilizzare qualcosa come:

     bus.post(new SampleEvent("Your Data")); 

    L'evento è solo una class pojo , qualcosa di simile:

     public class SampleEvent { private String message; public SampleEvent(String message) { this.message = message; } public getMessage() { return message; } } 

    o anche una class vuota:

     public class BlankEvent { } 

    Allora dovresti iscriverti ad aspettare e ricevere l'evento con:

     @Subscribe public void getMessage(SampleEvent event) { String message = event.getMessage(); // Process the message here. } 

    Penso che leggendo questa semplice spiegazione capinetworking quali sono i problemi del tuo codice.

    Ma suggerisco di utilizzare EventBus invece. OttoBus è ormai obsoleto. Non abbiate paura della curva di apprendimento, perché condividono lo stesso concetto.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.