2016-07-24 12 views
0

ich nicht wirklich eine Frage haben, möchte Sie bitten, mir diesen CodeAndroid. Instanzieren einer Schnittstelle?

public class HeadlinesFragment extends ListFragment { 
OnHeadlineSelectedListener mCallback; 

// Container Activity must implement this interface 
public interface OnHeadlineSelectedListener { 
    public void onArticleSelected(int position); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 

    // This makes sure that the container activity has implemented 
    // the callback interface. If not, it throws an exception 
    try { 
     mCallback = (OnHeadlineSelectedListener) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() 
       + " must implement OnHeadlineSelectedListener"); 
    } 
} 

... 

}

dies zu erklären ist über eine Klasse-Objekt, das Verfahren der Schnittstelle implementiert? auch wenn es ist, bitte erläutern Sie es danke

+0

Fühlen Sie sich frei, dies zu löschen, wenn Sie nicht wissen, was Sie damit tun. Es handelt sich um einen Rückruf, der beim Erstellen eines Fragments automatisch generiert wird. – Vucko

+0

kein Mann Werfen Sie einen Blick auf diese – Zgodni

Antwort

0

Der Code erstellt die Schnittstelle OnHeadlineSelectedListener und erfordert, dass jede Aktivität, an die das Fragment angehängt ist, diese Schnittstelle implementieren muss. (OnHeadlineSelectedListener) activity versucht, eine Aktivität an diese Schnittstelle zu senden, d. H. Überprüft, ob die Aktivität sie implementiert. Wenn nicht, wird ClassCastException geworfen.

+0

heißt das, dass onAttach von Aktivität aufgerufen wird? gute Antwort.danke – Zgodni

+0

In der Tat wird onAttach von Fragment Manager aufgerufen, wenn eine App versucht, ein Fragment an eine Aktivität anzuhängen. Typischer Arbeitsablauf: 1. App erstellt eine Fragmenttransaktion (Vorgang zum Anhängen oder Trennen eines Fragments). 2. Fragment Manager führt die Transaktion asynchron aus. 3. Bei Bedarf ruft Fragment Manager onAttach und andere Rückrufe auf. Schritt 1 ist in der Regel in Aktivität platziert, aber es ist nicht obligatorisch, es kann an beliebiger Stelle in Ihrer App sein. Oder gar nicht in Ihrem Code (wenn Fragment im Aktivitätslayout enthalten ist). –

0

Erstens, wenn Sie zum Beispiel zwischen Ihrer Aktivität und einem Fragment kommunizieren möchten; Wenn Sie über eine Anwendung verfügen, mit der Nutzer eine Überschrift auswählen und dann eine Detailansicht für sie öffnen können, können Sie eine Benutzeroberfläche wie oben gezeigt verwenden.

Schnittstellendefinition

Eine Schnittstelle ist ein Vertrag, dass, wer setzt sie muss respect/zu haften. Genau wie jeder andere Vertrag im wirklichen Leben.

Nun, in Ihrem Fragment, wenn Sie bereit sind, Ihre Aktivität von etwas zu benachrichtigen - wenn sie die Schnittstelle aus genau diesem Grund implementiert (um benachrichtigt zu werden), stellen Sie sicher, die Schnittstelle zu Ihrer Aktivität zu werfen und eine ClassCastException zu werfen Lassen Sie die Klasse wissen, dass sie die Schnittstelle implementieren muss.

Typ

Wenn Sie eine Schnittstelle zu der Aktivität gegossen, es bedeutet, dass, wenn eine Aktivität eine Schnittstelle implementiert, ist es dieses Typs (Schnittstellentyp) wird.

Abonnent/Publisher Design Muster

Wenn man darüber nachdenkt, das klingt wie das beliebte Subscriber/Publisher Design-Muster.

Wie?

Das Fragment ist die publisher in diesem Fall.

Die Aktivität ist die subscriber hier

im Wesentlichen also, um die Regeln des Vertrages zu gehorchen, muss die Aktivität der Schnittstelle implementieren, die die beiden Klassen kommunizieren hilft!

Ich hoffe, das hilft.

Übrigens klingt das und ähnelt meiner Demo-Anwendung, die derzeit unter PlayStore veröffentlicht wird.

Verwandte Themen