我有一個物品清單。當我在一個專案上滑動時,我想更新 Fragment 中的一個 textView。
我使用 RecyclerView。在 Adapter 中,我檢測用戶何時滑動某些東西,然后我嘗試呼叫 Fragment 中的一個方法來更新文本視圖。
但是,當我嘗試它時,它會因“LateInit Propery TextView 尚未初始化”而崩潰。 我曾嘗試在配接器中初始化 textView,但我認為這是不正確的,而且這似乎是不可能的,因為 findViewById 在配接器中并不真正起作用,因為特定的 TextView 不在專案布局上,而是顯示在 Fragment 中布局(它需要這樣,因為我不希望每個專案上都有 textview)。
我的配接器(簡化)
class SwipeAdapter internal constructor(private val mCandidatesArrayList: ArrayList<SwipeCandidate>) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private val mSwipeFragment = SwipeFragment() //Here I initialize my fragment
fun createHelperCallback(): ItemTouchHelper.Callback {
return object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {
override fun onMove(
recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
return false
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, swipeDir: Int) {
val position = viewHolder.bindingAdapterPosition
mSwipeFragment.updateTextView() //This throws the error
}
}
}
}
}
和我的片段(簡化):
class SwipeFragment : Fragment() {
private lateinit var textView : TextView
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
textView = root.findViewById(R.id.textview) //initializing textview
}
fun updateTextView() {
textView.setText("Hello") //Setting the text
}
}
uj5u.com熱心網友回復:
您正試圖從未打開的片段中獲取視圖。在我們的片段中,據我所知,配接器已初始化,您需要將一個偵聽器傳遞給它,該偵聽器將在滑動后呼叫。
class SwipeAdapter internal constructor(var onSwiped: (position: Int) -> Unit = { }, private val mCandidatesArrayList: ArrayList<String>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
fun createHelperCallback(): ItemTouchHelper.Callback {
return object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {
override fun onMove(
recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder,
): Boolean {
return false
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, swipeDir: Int) {
val position = viewHolder.bindingAdapterPosition
onSwiped(position)
}
}
}
}
分段
class SwipeFragment : Fragment() {
private lateinit var textView: TextView
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
textView = root.findViewById(R.id.textview)
val adapter = SwipeAdapter({ position: Int ->
textView.setText("Hello")
}, arrayListOf())
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/371980.html
標籤:科特林 变量 android-fragments android-recyclerview 初始化
下一篇:如何用Android資料系結替換androidx.fragment.app.FragmentContainerView中的片段
