Chinese, Traditional subtitles

← Casting with findViewById

Get Embed Code
13 Languages

Showing Revision 1 created 10/12/2015 by sp8.

  1. 我已經加入剛才我們在應用程式中看到的代碼
  2. 這代碼是 View orderSummaryTextView
    = findViewById
  3. 然后 我們傳入 order_summary_text_view 的資源 ID
  4. 但是這會造成下一行在 Android Studio 中發生錯誤
  5. 提示說不能解析 setText 方法
  6. 如果我在這里新增另外一行代碼
  7. 可以顯示對於這個變數有效的方法型式
  8. 因此 我們在這里建立 orderSummaryTextView 變數
  9. 它是一個 TypeView
  10. 因此在下一行 我們應該對它調用方法
  11. 但是如果你看這里的自動填入提示
  12. 這些方法實際上是 View 方法
  13. 并沒有專門用于 TextView 的方法
  14. 例如 這里沒有 setText 方法
  15. 因此 當我們嘗試調用 setText 時
  16. 你也不能設定文字大小 或設定文字顏色或任何其它項
  17. 那么所有這些方法在哪里呢
  18. 具體來說 TextView 是一種更特殊的檢視圖型別
  19. 如果我們想要對這個物件調用 TextView 方法
  20. 我們需要確定它是一個 TextView 物件
  21. 好的 現在這個變數是一個 TextView 物件
  22. 但是我們會看到另外一條錯誤 提示說型別不相容
  23. 因為在右側需要一個 TextViewis 檢視圖 但是我們找到的只是一個常規檢視圖
  24. 這是因為 findViewById 方法返回一個檢視圖
  25. 我們如何解決這個問題呢
  26. 由于 TextView 是一種更獨特的檢視圖型式 或者這樣說
  27. TextView 是子類別的檢視圖的 因此我們可以使用一種名為轉型的技術
  28. Java 中的轉型是指我們可以獲取此方法返回的 View
  29. 然后實際上將它作為 TextView 進行處理
  30. 現在 右側實際上是一個 TextView 物件
  31. 然后我們可以將它存放在這個 orderSummaryTextView 變數內
  32. 我知道 這確實有點難度 因為我們剛才
  33. 講了一大堆的新概念
  34. 現在讓我們來嘗試解釋一下
  35. findViewById 方法返回一個 View 類別的型別
  36. 書寫這樣的標注
  37. 用括弧標注需要的物件資料型別
  38. 我們把這個 View 轉型為 TextView.
  39. 這樣這里整個運算式的結果就是一個 TextView 物件
  40. 然后 我們可把它存放入左側的變數
  41. 也就是 orderSummary TextView 它的型別是 TextView
  42. 現在 在后面的代碼行 我們可以對這個物件調用 TextView 方法
  43. 現在你是否看到所有這有文本方法顯示在這里
  44. setAllCaps, setTextSize 和其他
  45. 現在我可以刪除這個 因為 setText 將會發揮作用
  46. 而不會有其他的錯誤
  47. 因此 如果我們想要調用 TextView 方法
  48. 我們需要一個 TextView 物件
  49. 為了設定一個 TextView 物件 我們需要調用 findViewById
  50. 然后將這個 View 物件轉型為 TextView
  51. 這里能夠進行轉型是因為
  52. 這個檢視圖階層中的 View 實際上是一個 TextView
  53. 如果我們嘗試將它轉型為單選按鈕這樣的物件 它將不會發揮作用
  54. 因為 orderSummaryTextView 實際上是一個 TextView
  55. 因此我們可以將轉型為適當的型別
  56. 同樣地 在 displayQuantity 方法中 我們調用 findViewById
  57. 我們為數量 TextView 傳入一個資源 ID
  58. 這返回一個 View 我們可以將轉型為 TextView
  59. 我們可以將它存放在這個名為 quantityTextView 的變數內
  60. 這個變數的型別是 TextView
  61. 因此在后面的代碼行 我們可以對它調用 TextView 方法 例如 setText.
  62. 這是使用轉型之后 經過更新的 MainActivity 代碼
  63. 我們可以把這些檢視圖轉型為 TextViews 這樣我們就可以把它們存放到
  64. TextView 型別的變數 這樣在這個 MainActivity 變數清單中
  65. 現在 quantityTextView 和 orderSummaryTextView 是 TextView 型別的
  66. 我們可以對它們調用 TextView 方法
  67. 我們不僅可以將它們作為 View 進行處理
  68. 現在我們還可以對它們調用 TextView 專用方法
  69. 例如 我們可以對 orderSummaryTextView 調用 setText 方法
  70. 我們可以對 quantityTextView 調用 setText 方法
  71. 因此你可以看到
  72. 對於在什么位置使用什么資訊型別 你應該十分小心
  73. 到目前為止 當我們調用方法時 我們并不需要考慮返回值
  74. 因為 setText 方法實際上沒有返回值
  75. imageView.setImageResource 方法也是這樣的
  76. 這個方法也沒有返回值
  77. 但是其它方法有返回值
  78. 例如在 TextView 類別中我們有一個 getTextSize 方法
  79. 這個方法返回一個整數
  80. 我們可以把這個方法的結果存放到名為 int 型別大小的變數之中
  81. 這里有另一個方法 也具有一個返回值
  82. 在 Button 類別中 你可以調用 getHeight 方法
  83. 這個方法返回一個整數值 因此你可以把它存放在變數中
  84. 如果你嘗試把這個結果放在字符串中

    85
    00:05:06,450 --> 00:05:10,810
    將會產生一個錯誤 因為此方法返回一個整數
  85. 為了知道需要把哪種型別的資料傳入方法
  86. 以及從一個方法返回哪種型別的資料 你需要檢視文檔
  87. 例如 在 TextView 類別中
  88. 如果你調用這些方法中的任何一個方法 它會返回一個整數型別的值
  89. 返回值資料型別位于這里的左側欄
  90. 其它方法的返回值可能是 void 或布林值
  91. 我們還沒有學習這兩種型的值 另外返回也可能是浮點數或長整數等
  92. 這個文件頁還顯示每個方法的輸入變數的
  93. 期望資料型別
  94. 例如 setTextColor 方法需要整數作為輸入
  95. 返回值是 void 因此沒有返回值
  96. 讓我們來檢視文件 了解期望什么樣的資料型別
  97. 否則 Android Studio 將會報錯
  98. 提示資料型別不符合
  99. 現在 請你來操練
  100. 下面是四個不同的代碼示例
  101. 一些代碼可能含有資料型別不符合錯誤
  102. 如果你找到錯誤
  103. 請在提供的方塊中描述你如何解決這個錯誤
  104. 如果代碼是完美的 你可以直接寫出無錯誤字樣
  105. 這個測驗有一點難度 因為我們只介紹了幾個概念
  106. 而這個代碼對你來說有一點新鮮
  107. 請不要著急 查看文件來了解這些方法
  108. 保證輸入和返回值是正確的
  109. 而且 如果我們要宣告變數 我們需要在這里設定正確的資料型別
  110. 另外 請查看這些方法調用的相關文件
  111. 確保使用正確的方法