2017-04-27 80 views
-2

正如標題所示,在Android中遵循什麼更好的技術?我提到了幾個文檔,但找不到我需要的很多細節。實現接口vs在Android中傳遞接口對象

考慮我有5+的意見,我想在一個地方處理他​​們的點擊,然後創建一個ClickListener object和傳球最好還是在活動/片段實施ClickListener interface,然後傳遞活動的實例/片段是更好爲什麼?

編輯

讓我補充一個例子,因爲大多數的人都無法理解的聲明

案例1

private final View.OnClickListener onClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     //some code 
    } 
}; 

public void doSomeTask(){ 
    view1.setOnClickListener(onClickListener); 
    view2.setOnClickListener(onClickListener); 
    view3.setOnClickListener(onClickListener); 
} 

案例2:

public class SomeActivity extends AppCompatActivity implements View.OnClickListener { 

    //some code 
    public void doSomeTask(){ 
     view1.setOnClickListener(this); 
     view2.setOnClickListener(this); 
     view3.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 
     //some code 
    } 
} 

哪一個是最好的方法案例1或案例2?

+0

我不確定,但你的問題像java中的多繼承或多級繼承? –

+2

取決於你將來需要其他的點擊監聽器,我通常創建一個ClickListener對象並使用它來代替實現接口,我發現這種方式稍微乾淨一點,而不是實現接口,然後在需要時創建ClickListeners 。無論如何,我認爲它不會有太大的變化,所以請儘量使用你最喜歡的東西。 – Ayoub

+0

@Aoub是的,一般來說它沒有太大的區別,但是當項目規模增加並且其他代碼對當前代碼的依賴性不斷增加時會出現問題。其他要考慮的事項是活動與片段相關的時間長短,它在哪裏被使用等等。一般來說,我實現了接口,但最近遇到了相沖突的代碼。所以是的,除了代碼維護之外,我還需要一些更加傻瓜的原因。 –

回答

1
  • 一個聽衆不僅可以分配給兩個按鈕,而且還可以分配給任意數量的聽衆。而不僅僅是按鈕。其他視圖元素也有不同的事件,這需要偵聽器。
  • 您創建的對象越少越好,因爲爲每個對象分配了內存,而且這種資源非常有限,尤其是對於移動設備。這就是爲什麼從優化的角度來看,爲多個視圖創建一個監聽器的原因。
  • 代碼量減少了,它變得更具可讀性。

欲瞭解更多信息Check here

+0

是的,所以我的問題是,一個偵聽器對象或實現偵聽器接口? –

+0

檢查這個問題http://stackoverflow.com/questions/29479647/setonclicklistener-vs-onclicklistener-vs-view-onclicklistener –

+0

你也可以在這裏檢查http://stackoverflow.com/questions/30082892/best-way-to -implement-view-onclicklistener-in-android –

0

我認爲這取決於。

我個人更喜歡創建一個單獨的類,在可能的情況下實現接口(Case-1)。

如果您需要使用某個類的字段和方法,最好只實現接口(第2種情況)。還有另外一種情況 - 當你沒有明確地設置接口時,例如, Fragment回調接口。 Fragment有它們自己的生命週期 - 所以使用回調setter將不起作用。我們所知道的是,他們有一次被附加(在onAttach()),所以我們嘗試將接收到的Context轉換爲我們需要的接口。這樣,您必須實現Activity中的實例化Fragment的接口。

小心一些其他問題。例如。你有一個需要偵聽器對象的單例類。您在Activity中實現接口並將實例傳遞給該類。但是Activity可能會被銷燬並重新創建 - 這會導致StrictMode報告activity instance count violation,因爲該單例類仍然會引用前一個Activity實例。

+0

感謝您的回答,但對於我提出的問題來說,它太廣泛了。 –