2012-07-28 87 views
0

在你認爲它是一個民意調查之前,請完整閱讀這個,我正在尋求信息和參考(@PéterVarga)Android「最佳」方式實現按鈕回調(XML onClick,新的onClickListener,實現onClickListener,爲該按鈕實現分類)

這是我的第一個問題在這裏球員,我終於註冊,因爲我已經彈出了很多次,我覺得我實際上讓它變得更糟我。這個問題是相當開放的,因爲我想要優點和缺點。 我試圖將EMBRACE綁定到Android,以及它如何處理這些事情(XML,Activities,destroying Activities),並且通常我是一個WxWidgets的人,所以這感覺非常不同。我越讀越有意義。但有一個問題,這個問題,不僅適用於按鈕,而且適用於所有回調。到目前爲止,Android教程和指南似乎(更多)是關於如何快速運行某些東西,正如我所說的,我試圖接受Android,而不是爲它創建另一個應用程序。

所以正如標題所暗示的,我已經使用了按鈕,但是有,任何回調。

首先使用情況下,「問題」 考慮2個片段,A和B,以及2個活動,X和Y 現在讓我們說A包含了一個列表,和B的細節清單上的​​項目(通用設置) 如果處於橫向模式,如果在縱向模式下,活動X將顯示片段A和B,如果沒有選擇任何東西(並且通過任何方式存儲選擇(隨意提及潛在/體面的方式)片段A將顯示X,當選擇了某些東西時(或者如果選擇了某些東西)片段B將由活動Y顯示。 如果它處於橫向模式,則活動Y將調用它的「finish()」方法,我明白它開始銷燬。我可以通過經驗來驗證這一點,但這意味着我的結論可以從行爲中推斷出來(儘管我可以正確推斷)谷歌實際上的目標。

如果我使用XML onClick方法,B有時會得到該回調,如果它完成了,它怎麼可能會轉到A呢? 我應該將邏輯添加到片段嗎? (通過創建一個新的onClickListener內聯) 我應該做一些我可能會在WxWidgets中做的事情,我擴展了基本上所有的類,併爲我自己的類實現了onClickListener,因此可以擁有自己的onClick方法?

如果它有助於我的作業,我已經瞭解到我可能不應該嘗試捕捉配置更改事件,我接受我的Activies將被關閉並重新啓動,因此我可以在onCreate方法中檢查方向,因爲活動的生命週期不會改變方向。 哪個導致我的最終問題,是捆綁唯一的方法?我發現了另一個,但它已被棄用,並且僅用於配置更改。

謝謝,對不起,它很長,是的,相當廣泛。我真的無法在任何地方找到這場辯論。 (在這篇帖子中,我今天到達了O'Reilly的Android書,我懷疑他們(O'Reilly的書)在這裏很受歡迎,請給我一個頁面參考, 。本書也到了,我把它作爲一個PDF文件,爲了表示我的同意,再次購買了它,這是第4版(或者僅僅是第4版)的主題題目,所以我還沒有閱讀碎片部分,但我懷疑它會流失多少光)

順便說一句,我可以看到類似的問題,我一直在閱讀他們,當我點擊張貼在這,如果我這樣做,這是因爲我仍然認爲這是一個問題。

編輯1 :(編輯是更新而不是說明,基本上是新的部分) 對於任何閱讀此內容的人(1是在第250頁的未答覆的Q中,每頁50個....)我會後我的想法,所以你也許可以得到一個答案(如果我不這麼做) 我決定嘗試這樣的事:

this.MemberOfClass = 0; 
button.setOnClickListener(new View.OnClickListener() {    
    public void onClick(View v) { 
     MemberOfClass++;   
     MethodOfClass(); 
    } 
}); 

在哪裏(我用「這個」來說明我的意思是MemberOfClass)MethodOfClass不是OnClickListener的一個方法,但是它發生在這個類中(不知道我是否愛Java的範圍),這創建了一個方法來爲每個Fragment(或Activity)其中MethodOfClass被調用(Activity X或Y's遵循我自己的例子),根據這個代碼的位置。

在一個真正重視微小內存佔用和低規格系統軟件的平臺上創建一個對象似乎非常浪費,但是我還沒有找到更好的方法,因此這個問題。

編輯2: 我尋找到我怎麼會去爲每個按鈕創建一個單獨的按鈕類,同時仍保持XML部分整齊(使用按鈕原始)

+0

一個單獨的類可能是矯枉過正,但所有的選項都有效。哪個最好?取決於具體的用例。 Stackoverflow不適用於民意調查。 – 2012-07-28 14:46:36

+0

請在回覆前詳細閱讀帖子,問題不是說「投票贊成你的收藏方式」請澄清單獨的課程會起什麼作用?我怎麼能用一堂課?這是問題的要點。 @PéterVarga看到一些低估的東西真是令人沮喪,因爲有人在第一天沒有讀過這個問題。如果第一個問題是投票,請。 – 2012-07-28 14:47:21

回答

1

看,當你指定XML帶有回調方法名稱的onClick屬性,它會嘗試在當前持有片段的Context中查找指定的方法。在這種情況下,將視圖描述(XML佈局)與功能邏輯分開很好。所以我個人喜歡爲每個片段實現不同的點擊監聽器(不管你是否將它們聲明爲匿名類或單獨的類)。

您可以爲每個按鈕創建自己的類,但是恐怕從面向對象的範例POV來看這不是一個好主意。通常,創建新類的原因是推廣一些常用的實體(其由實例衆多組成)。在beeing討論的情況下,你的按鈕可能只針對某些動作,所以沒必要爲每個動作類型創建新的類。

還有一種方法可以確定哪個Activity調用了監聽器的onClick方法。 onClick()中的某個地方只是調用提供的view參數的view.getContext(),並且如果它是ActivityA實例或ActivityB實例,則檢查它是否爲instanceof運算符的類。

此外,可能會建議您嘗試堅持Java編碼約定,而不是命名以大寫開頭的類字段和方法。它只是幫助其他人更快,更清晰地閱讀和理解你的代碼。

0

Anonymous Class是因爲大多數情況下要走的路,你就只需要one instance所以這將是使一個單獨的類並實現OnClickListener的浪費,是一個很好的做法,我喜歡在method創建該匿名對象因爲它更容易閱讀createRequestItemPositiveListner()比創建一個Dialog這樣的方法:

dialogBuilder.setPositiveButton("Yes",new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      //do request item things... 
     } 
    }); 

我preffer這樣的:

dialogBuilder.setPositiveButton("Yes", createRequestItemPositiveListener()); 

更容易閱讀,如果您想查找在對話框的「PositiveButton」中完成的代碼,則通過該方法比在Dialog創建中某處的代碼更容易,如果request item things需要在至少30-50行代碼,對話框的創建將變成一團糟,我建議您閱讀Clean CodeUncle-Bob (Robert C. Martin)以獲得更好的理解。