2013-11-26 29 views
1

我正在用我的方式向我的一個朋友扔了幾本關於android編程的書(所以我想你會打電話給這個作業嗎? )我們多次遇到類似以下示例的代碼段,並且我從未完全理解這些段,只是無意中使用了它。有人會有時間把這個例子分解成幾行,而不是與「點」操作符一起使用嗎?我嘗試了很多次,並且把頭髮拉出來,而且我已經夠老了,所以我沒有太多的頭髮了。我無法解析以下幾行android(/ java)代碼

View v = getActivity().getLayoutInflater() 
    .inflate(R.layout.some_dialog, null); 


return new AlertDialog.Builder(getActivity()) 
    .setView(v) 
    .setTitle(R.string.some_dumb_title) 
    .setPositiveButton(android.R.string.ok, null) // null can be On Click Listener 
    .create(); 

也許指向一些使用簡單的代碼行來完成工作的網頁的指針。我知道寫它的方式更有效率,但看到它的佈局會使它更容易理解,更重要,更易於調試。

回答

1
Activity a = getActivity(); 
LayoutInflater inflater = a.getLayoutInflater(); 
View v = inflater.inflate(R.layout.some_dialog, null); 


AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setView(v); 
    builder.setTitle(R.string.some_dumb_title); 
    builder.setPositiveButton(android.R.string.ok, null); // null can be On Click Listener 
AlertDialog dialog = builder.create(); 
return dialog; 

這兩個例子將方法鏈接在一起,因爲我們不關心介於兩者之間的關係,我們關心最終產品。如果您的代碼運行良好,並且您知道自己在做什麼,則鏈接很方便。出於調試目的,並不鏈的方法,堆棧跟蹤將沒有幫助(考慮會發生什麼是getLayoutInflater()鏈接方法時返回null

值得一提的,雖然,這對於AlertDialog.Builder例如,每個方法返回相同的AlertDialog.Builder對象,而在第一個例子中,你得到了很多不同的對象,企圖擡高你定的視圖。

+1

非常感謝:我現在正在檢查您的產品。如果它有效,我會挑釁地回來選擇這個作爲正確的答案 - 喬 –

+1

工作很好。已經想通了,我需要分號。這回答了好幾個月來一直困擾着我的問題。我接受了答案,並打了+1。 再次感謝 - Joe –

3

看起來像它的使用builder pattern創建AlertDialog。如果我們follow what the documentation說一下吧,我們得到以下內容:

View v = getActivity().getLayoutInflater() 
.inflate(R.layout.some_dialog, null); 

這大致翻譯爲:

  • 獲取有關當前實例或超類
  • 隨着該活動的活動,得到它的佈局吹氣
  • 隨着該佈局吹氣,用論據它充氣R.layout.some_dialognull

 

return new AlertDialog.Builder(getActivity()) 
.setView(v) 
.setTitle(R.string.some_dumb_title) 
.setPositiveButton(android.R.string.ok, null) // null can be On Click Listener 
.create(); 

這大致翻譯爲:

  • 獲取新的構建,以及當前實例的活動或超類路過
  • 然後,與建設者,設置視圖
  • 使用相同的構建器,將標題設置爲R.string.some_dumb_title
  • 在相同的助洗劑,設置一個正的按鈕與該參數android.R.string.oknull
  • 在相同的助洗劑,調用create,從而產生AlertDialog
+1

謝謝Makoto:您的解釋,加上'A - C'的代碼片段,回答了我一直在抨擊我很長一段時間的一堆問題。到你的答案。 –