Android Frammento – BroadcastReceiver chiamata frammento di metodo

Ho un BroadcastReceiver che riceve broadcast inviati a un Frammento.
Io sono sempre trasmesso, ma come posso chiamare un metodo di un Frammento di sé?
In pratica ho bisogno di aggiornare l’Elenco, una volta che la trasmissione arriva, la Lista & metodo di aggiornamento sono parte del Frammento.

public class FragmentReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if(action != null && action.equals("AllTasksFragmentUpdate"))
        {
            //
        }
    }
}

Registrazione del ricevitore:

    @Override
public void onCreate(final Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    getActivity().registerReceiver(new FragmentReceiver(), new IntentFilter("AllTasksFragmentUpdate"));
}

Come posso chiamare il metodo dal Frammento?

  • che è l’attuazione di questa trasmissione ricevitore se il frammento è quindi possibile chiamare il metodo facilmente all’interno brodacast ricevitore.
  • È possibile registrare un ricevitore all’interno del vostro frammento e implementare non solo e poi si può telefonare a qualsiasi frammento di metodi.
  • Si può semplicemente chiamare il Frammento metodo interno della trasmissione del ricevitore metodo onReceive. Non si può?
  • Ho modificato la domanda originale, pubblicato all’albo ricevitore chiamata.
  • Ho provato, ma non riesce a trovarla. Ho modificato la domanda originale, pubblicato all’albo ricevitore chiamata.
  • non pensare invece di estendere la classe broadcast receiver , registrare il broadcast receiver all’interno del vostro frammento e quindi si può facilmente chiamare i vostri metodi, per Favore fatemi sapere se avete bisogno di un codice di esempio per la stessa.
  • codice di esempio sarebbe fantastico!, Sto solo super nuovo di questo Android roba.
  • Vi ho dato l’esempio di codice per implementare broadcast receiver.

InformationsquelleAutor David Faiz | 2016-03-14

 

4 Replies
  1. 11

    È possibile implementare la trasmissione ricevitore nel modo seguente:

    import android.app.Fragment;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.content.LocalBroadcastManager;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    import com.adobe.libs.connectors.R;
    
    public class YourFragment extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater,
                                    @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            super.onCreateView(inflater, container, savedInstanceState);
            //Start listening for refresh local file list   LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mYourBroadcastReceiver,
                    new IntentFilter(<YOUR INTENT FILTER>));
    
            return inflater.inflate(R.layout.your_fragment_layout, null, true);
        }
    
        @Override
        public void onDestroyView() {
            LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mYourBroadcastReceiver);
        }
    
        private final BroadcastReceiver mYourBroadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                //Now you can call all your fragments method here
            }
        };
    }
    • Devo usare ‘onCreateViewRAW’ o può attaccare a ‘onCreateView’?
    • Mi dispiace stick per onCreateView
    • Ho trovato un problema quando aggiungi ‘ricevitore’ nel file manifest, come è impossibile trovare ‘mYourBroadcastReceiver’.
    • Possiamo parlare di queste davvero veloce?
    • Certo , sarebbe bello se si condivide il ricevitore che hai messo nel tuo manifesto
    • Ecco il link chat.stackoverflow.com/rooms/106323/android-receiver
    • Non si dovrebbe (onu)registrare in onPause() e onResume()?

  2. 2

    Nel onReceive() metodo, potete trovare il vostro frammento da il nome del tag (il nome con cui è creata un’istanza tuo frammento) e chiamare il suo metodo pubblico.

    SampleFragment fragment = (SampleFragment) getSupportFragmentManager().findFragmentByTag(<fragment_tag_name>);
                    if (fragment != null && fragment.isAdded()) {
                        fragment.method(); //Call any public method
                    }

    Spero che questo aiuta !

    • Ottengo un errore “impossibile risolvere getSupportFragmentManager’. Credo che il Ricevitore di classe deve estendere ‘FragmentActivity’ ma va ‘BroadcastReceiver’.
    • L’attività contenente il ricevitore e/o frammento dovrebbe estendere FragmentActivity.
  3. 0

    Supponendo che si dispone di una Attività denominata MyActivity e a un certo punto del codice, si vuole fare una trasmissione per essere ricevuto da un Frammento di nome MyFragment. Si può fare come questo:

    In MyActivity, utilizzare LocalBroadcastManager per fare la trasmissione con un filtro:

    String filter = "thisIsForMyFragment";
    Intent intent = new Intent(filter); //If you need extra, add: intent.putExtra("extra","something");
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

    In MyFragment, all’interno onCreateView() aggiungi questo per registrare il ricevitore:

    LocalBroadcastManager.getInstance(getActivity()).registerReceiver(myBroadcastReceiver,
            new IntentFilter("thisIsForMyFragment"));

    Seguenti, In MyFragment (al di fuori onCreateView()) creare il ricevitore metodo per ricevere la trasmissione:

    private final BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context context, android.content.Intent intent) {
            Toast.makeText(getActivity(), "Broadcast received!", Toast.LENGTH_SHORT).show();//Do what you want when the broadcast is received...
    
        }
    };

    Infine, in MyFragment aggiungere questo per annullare la registrazione del ricevitore onDestroyView:

    @Override
    public void onDestroyView()
    {
        super.onDestroyView();
        LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(myBroadcastReceiver);
    }

Lascia un commento