2016-07-24 7 views
0

は、私は実際にちょうどインタフェースのメソッドを実装するクラスのオブジェクトについてはこれです、このコードAndroid。インタフェースのインスタンス化?

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"); 
    } 
} 

... 

}

私に説明をお願いしたい、疑問を持っていませんか? でも、それを説明してください ありがとう

+0

あなたが何をしているのか分からない限り、これを削除してください。コールバックで、フラグメントを作成するときに自動生成されたようです。 – Vucko

+0

男性なし これを見て – Zgodni

答えて

0

コードでは、インターフェイスOnHeadlineSelectedListenerが作成され、フラグメントが関連付けられているすべてのアクティビティでこのインターフェイスが実装されている必要があります。 (OnHeadlineSelectedListener) activityは、そのインターフェイスにアクティビティをキャストしようとします。つまり、アクティビティがそのアクティビティを実装しているかどうかを確認します。そうでない場合はClassCastExceptionがスローされます。

+0

これは、onAttachがアクティビティによって呼び出されたことを意味しますか?いい答えだ。ありがとう – Zgodni

+0

実際に、アプリケーションがフラグメントをアクティビティに添付しようとすると、onAttachはフラグメントマネージャによって呼び出されます。典型的なワークフロー:1.アプリケーションはフラグメントトランザクション(フラグメントのアタッチまたはデタッチ操作)を作成します。2.フラグメントマネージャはトランザクションを非同期に実行します。3.フラグメントマネージャは、onAttachおよびその他のコールバックを呼び出します。ステップ1は実際には通常Activityに配置されますが、必須ではなく、アプリ内の任意の場所に配置することができます。あるいは、あなたのコードでさえ(フラグメントがアクティビティー・レイアウトに含まれている場合でも)。 –

0

まず、あなたのアクティビティとフラグメントの間で通信したいとき。ユーザーが見出しを選択して詳細を開くことができるアプリケーションがある場合は、上記のようにインターフェイスを使用できます。

インタフェース定義

インターフェースは誰でも、それが尊重/​​を遵守しなければならない実装していること契約です。実生活における他の契約と同じように。

あなたの作品では、何かのアクティビティを通知する準備ができているときに(通知される)まさにこの理由でインターフェイスが実装されているため、インターフェイスをアクティビティにキャストしてClassCastExceptionインターフェイスに実装する必要があることをクラスに知らせます。

タイプ

アクティビティへのインタフェースを唱えたとき、それは活動がインターフェイスを実装する場合、それはそのタイプ(インターフェイスタイプ)のになっていることを意味します。

加入者/出版社のデザインパターン

あなたが考えてみれば、これは人気のSubscriber/Publisherデザインパターンのように聞こえます。

どのようにですか?

この場合、フラグメントはpublisherです。

活動はだからここsubscriber

あり、本質的には、契約のルールを遵守するために、活動は2つのクラスが通信することができますインターフェイスを実装する必要があります!

こちらがお役に立てば幸いです。

ところで、これは現在、PlayStoreに公開されているデモアプリケーションとよく似ています。

関連する問題