2016-11-07 68 views
0

這個問題是關於Android的發展。一般來說,如何將佈局XML文件綁定到某個Activity java文件?這與指定了android:onClick屬性的按鈕相關。假設你有一個類似下面的按鈕佈局XML文件:Android:在android中指定完整的方法路徑:onClick

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/button_send" 
    android:onClick="sendMessage" /> 

所以單擊此按鈕時,一個sendMessage(View view)方法被調用。如果多個Activity有一個sendMessage(View view)方法,Android如何決定調用哪一個?幾乎沒有任何關聯佈局文件與活動文件。在Android Studio中,如果有多個選項,我發現android:onClick="sendMessage"默認爲主要活動的sendMessage方法。我還發現Android Studio不會讓您只指定完整的方法路徑(例如,android:onClick="com.example.Activity2.sendMessage")。我錯過了什麼嗎?

編輯:我想補充的是Android Studio中顯示的sendMessage默認爲一個特定的活動,不管是哪個活動已經通過的setContentView()指定的佈局

+0

Android決定調用哪個方法,因爲您將setContentView(int layoutId)調用到onCreate活動方法中。 –

+0

「從字面上看,絕對沒有任何關聯佈局文件和活動文件的情況」 - 「setContentView()」至少在2008年就已經出現並記錄在案。其他技術也存在(例如,使用片段)。 – CommonsWare

+0

但是,當我在'android:onClick =「sendMessage」中輸入'sendMessage''時,Android Studio顯示一個小的彈出窗口,顯示「com.example.MyApp.MainActivity」無論什麼活動將特定佈局設置爲其內容視圖 – CircuitScholar

回答

1

的會調用該方法的Activity您的佈局充氣並附加到。佈局和控制器之間應該沒有緊密的耦合,這就是爲什麼你不能指定「完整路徑」。

我建議使用編程OnClickListener而不是xml屬性。它給你更大的控制。

+0

你說應該沒有緊密的耦合......當你輸入'android:onClick =「......」'時,爲什麼Android Studio會顯示一個顯示完整方法路徑的小彈出窗口?我主要是因爲沮喪而問這個問題,因爲我開始認爲Android Studio只是顯示不準確的信息,以致無法成爲超級方便的代碼編輯器。 – CircuitScholar

+0

這將是不準確的信息?不要將方法耦合到佈局onClick標記只是一種最佳做法。 –

+0

這是不準確的,因爲根據這裏所說的,默認情況下,佈局根本不受任何特定活動的約束。它被綁定到任何Activity上調用setContentView。所以Android Studio通過顯示那個小的彈出窗口('com.whatever.AppName。ActivityName「),因爲您在佈局XML文件中輸入方法名稱,因爲這不一定是其方法將被調用的Activity。 – CircuitScholar

0

當然,它會從該視圖的活動類中調用該方法。因此,如果該視圖來自主活動,並且該視圖來自Activity2,則它將從主活動類調用,然後它將在Activity2中查找sendMessage方法。如果它無法在Activity2類中找到sendMessage方法,那麼它將拋出一個NullpointerException。

1

有一個tools:context屬性,您可以使用它來告知Android Studio在什麼情況下佈局將被使用。你在那裏指定一個類,然後應該用這個類來找到正確的方法

但是這個屬性只適用於IDE。在運行期間,它綁定到擴大布局的活動的方法。

+0

是的,這正是我的想法,但我發現tools:context屬性對這個問題沒有影響(Android Studio仍然聲稱它缺省爲主活動的方法實現,無論您指定哪個Activity工具:上下文) – CircuitScholar

+0

這很奇怪。聽起來像Android Studio中的一個Bug給我。正如我使用AndroidAnnotations @Click註釋來做這種綁定,我現在很長一段時間沒有使用onClick屬性。 – Dodge

+0

我同意這可能只是一個錯誤,現在我已經看到了每個人的回答和評論。我討厭臃腫的代碼編輯器,所以我只會編寫我的代碼,並嘗試忽略Android Studio的半成品裝飾。 – CircuitScholar