內容目錄
為何要用 View Binding ?
View Binding 的功能和 findViewById() 相同,都是用來取得 GUI 元件的參考,但是使用 View Binding 更為方便。
View Binding有以下的優點:
1、null-safe
2、type-safe
3、比較快的編譯速度 (Faster compilation)
4、使用方便 (Ease of use)
這是我們要使用 View Binding 來取代 findViewById() 的原因。
但是 View Binding 也有一些不足之處:
1、View binding doesn’t support layout variables or layout expressions
2、View binding cannot be used to declare dynamic UI content straight from XML layout files
3、View binding doesn’t support two-way data binding
這些沒辦法達成的功能,我們會用 Data Binding 來補強。
如何使用 View Binding?
建立 Dependencies
app/build.gradle
... android { ... buildFeatures { viewBinding true } } ...
在 activity 中使用
以 MainActivity.kt 為例
class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) val view = binding.root setContentView(view) } }
在 fragment 中使用
view binding 使用在 Activity 和 Fragment 上,會有一些不同,因為 Fragment 在 onCreateView() 時,才能跟 view 產生互動,所以必須要考慮到 binding 為 null 的狀況。
以 HelpFragment.kt 為例
class HelpFragment : Fragment() { private var _binding: FragmentHelpBinding? = null private val binding get() = _binding!! override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { _binding = FragmentHelpBinding.inflate(inflater, container, false) val view = binding.root } override fun onDestroy() { super.onDestroy() _binding = null } }
Comments