2014-06-21 107 views
0

我需要一點幫助與我的接口。我認爲我根本不理解他們。 所以我創建了這個接口來通知每個實現它的類,當某個事件發生時。Android的公共接口

public interface OnColorsChangeListener { 
    void onColorsChangeListener(ColorsProp colorsProp); 
} 

我的類持有接口:

public class ClassTest implements OnColorsChangeListener { 

... // other code 

@Override 
public void onColorsChangeListener(ColorsProp colorsProp) { 
    Log.d(TAG, "Color changed! " + colorsProp.color); 
} 

我把這個在4/5類是:

private OnColorsChangeListener mCallback; 

... // other code 

    // the event occurs here so i call: 
    mCallback.onColorsChangeListener(mProps); 
    // but of course here i get an NPE becouse this is undefined in this class.. well,  with some replies here i'll understand better how to use that for reach my point 

實現它的類同時通知顏色變化。我很確定,原因是我不太瞭解他們是如何工作的,所以任何人都可以指出我的正確方向?謝謝!

+0

什麼擁有接口應該實現的類?您可能想閱讀[接口上的Java教程](http://docs.oracle.com/javase/tutorial/java/concepts/interface.html)。 – keyser

+0

應該通知其他人的類是具有私人OnColorsChangeListener mCallback的類; – iGio90

+0

這聽起來像你想要使用BroadcastReceiver,然後在所有你想同時接收這個事件的地方註冊。 http://developer.android.com/reference/android/content/BroadcastReceiver.html – zoltish

回答

1

說明舉例:

你必須實例化您的回調,&那一定是你的類的實例

private OnColorsChangeListener mCallback; 

mCallback = new ClassTest(); 


mCallback.onColorsChangeListener(mProps); 

但是如果你想要多個回調,則需要使用觀察者模式。 簡單的例子:

private List<OnColorsChangeListener> mCallbacks = new ArrayList<OnColorsChangeListener>(); 

mCallbacks.add(new ClassTest()); 
mCallbacks.add(new OtherClass()); 

for(OnColorsChangeListener listener : mCallbacks) { 
    listener.onColorsChangeListener(mProps); 
} 

顯然,如果你有課,別的地方你也不會新的它,你會使用參考:

mCallbacks.add(mClassTest); 

Observer Pattern Wikipedia

+0

感謝您的解釋! – iGio90

+0

附註:回調和聽衆意味着稍微不同的東西(也是觀察者)。儘量不要像上面那樣混淆它們。回調是當1件事完成時,並在最後得到回調。聽衆更多的時候可以在事件之後或多次之間呼叫等 – Blundell

+0

偉大的,所以我絕對需要一個聽衆:D – iGio90

0

接口只是將一堆相關方法組合在一起的一種方法。實現這個接口然後要求你實現接口組合在一起的所有方法。

Java教程有關於這個問題的一個很好的閱讀:

What is an interface?

下面是關於Android的監聽器接口#1線:

How to create our own Listener interface in android?

總之,你不直接使用接口,因爲它只指定實現類的哪些方法應該實現。

+0

好吧,我想我現在還沒有準備好!所以我正面臨錯誤的方式來實現我的得分。也許你可以指點我一種方法來通知某些類發生事件時?(沒有使用廣播) – iGio90

+0

@ iGio90布倫德爾給出了一個很好的例子來說明如何在你的情況下做到這一點,因爲我確信你注意到了:p – keyser