val holder: MemesAdapter.ViewHolder? = binding.contentMain.recyclerViewMemes.findViewHolderForAdapterPosition(i) as MemesAdapter.ViewHolder?
有時它不能被鑄造,這將是防止崩潰的解決方法,所以有沒有辦法事先檢查它?
uj5u.com熱心網友回復:
有一種方法可以在強制轉換之前檢查型別
選項 1:使用 is
val holder = binding.contentMain.recyclerViewMemes
.findViewHolderForAdapterPosition(i)
if (holder is MemesAdapter.ViewHolder) {
// cast is possible, and you don't need to cast it manually
// because Kotlin smart-cast will do it for you
// holder is already of type MemesAdapter.ViewHolder inside this if
holder.someProperty = ...
}
選項2:使用as?(帶問號)
val holder = binding.contentMain.recyclerViewMemes
.findViewHolderForAdapterPosition(i) as? MemesAdapter.ViewHolder
if (holder != null) {
// cast succeeded and Kotlin smart-cast ensures
// it is of type MemesAdapter.ViewHolder (not null!) inside this if
holder.someProperty = ...
}
is如果您必須檢查多個型別(在異構配接器中),第一個選項(使用)具有優勢,例如
val holder = binding.contentMain.recyclerViewMemes
.findViewHolderForAdapterPosition(i)
if (holder is MemesAdapter.HeaderViewHolder) {
holder.someHeaderProperty = ...
} else if (holder is MemesAdapter.ItemViewHolder) {
holder.someItemProperty = ...
}
uj5u.com熱心網友回復:
在使用as關鍵字投射之前試試這個
if (holder is MemesAdapter.ViewHolder)
is 在這里至關重要;)
uj5u.com熱心網友回復:
如果轉換不成功,則使用as?而不是as獲取轉換的值或 null。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/405209.html
標籤:
