2016-07-24 84 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. App創建片段事務(附加或分離片段的操作),2.片段管理器異步執行事務,3.當需要時,片段管理器調用onAttach和其他回調。第1步確實通常放置在Activity中,但它不是強制性的,它可能在您應用程序的任何位置。甚至根本不在你的代碼中(當片段包含在活動佈局中時)。 –

0

首先,當你想在你的活動和一個片段之間進行通信時,如果您的應用程序允許用戶選擇標題並打開詳細信息,則可以使用上面顯示的界面。

接口定義

接口是,無論誰實現它必須相對於/堅持合同。就像現實生活中的任何其他合同一樣。

現在,在您的片段中,當您準備好通知您的活動時 - 考慮到他們正是爲了這個原因而實施了界面(將被通知),您確保將界面投射到您的活動並將ClassCastException讓這個類知道它必須實現這個接口。

類型

當你施放一個界面活性,它意味着當一個活動實現一個接口,它成爲該類型(接口類型)的。

訂閱者/發佈設計模式

如果你仔細想想,這聽起來像流行Subscriber/Publisher設計模式。

怎麼樣?

在這種情況下,片段是publisher

活動是這裏

subscriber所以,從本質上講,爲了遵守合同的規定,活動必須實現有助於兩類通信的接口!

我希望這會有所幫助。

順便說一下,這聽起來很像我目前發佈在PlayStore上的演示應用程序。