android - MVVM 架构上的 ItemTouchHelper
问题描述
我正在尝试对onSwiped
我的.RecyclerView
view
adapter
我现在正在尝试在我的 上执行此操作Fragment
,但由于某些原因,Android Studio 没有显示attachToRecyclerView()
我的方法ItemTouchHelper
这里我的ItemTouchHelper
class RecyclerItemTouchHelper(var viewModel: DayTrackerViewModel, var adapter : DayAdapter) : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT ){
lateinit private var _adapter : DayAdapter
lateinit private var _viewModel : DayTrackerViewModel
init {
_adapter = adapter
_viewModel = viewModel
}
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
_viewModel.deleteDay(viewHolder.itemId)
_adapter.notifyDataSetChanged()
}
}
在这里我的Fragment
class DaysTrackerFragment : Fragment() {
lateinit var itemTouchHelper : RecyclerItemTouchHelper
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
// Inflate the layout for this fragment
val binding: DaysTrackerFragmentBinding = DataBindingUtil.inflate(
inflater, R.layout.days_tracker_fragment, container, false
)
val application = requireNotNull(this.activity).application
val dataSource = DayDatabase.getInstance(application).dayDatabaseDao
val viewModelFactory = DayTrackerViewModelFactory(dataSource, application)
val viewModel = ViewModelProviders.of(this, viewModelFactory).get(DayTrackerViewModel::class.java)
binding.setLifecycleOwner(this)
binding.viewModel = viewModel
val adapter = DayAdapter(DayAdapter.DayListener { _ ->
viewModel.onDayClicked()
})
itemTouchHelper = RecyclerItemTouchHelper(viewModel, adapter)
binding.dayList.adapter = adapter
// itemTouchHelper.attachToRecyclerView -> Doesn't get the method
viewModel.eventSaveButtonPressed.observe(this, Observer { hasBeenPressed ->
if (hasBeenPressed) {
viewModel.createDayAndInsert(binding.dayInput2.text.toString(), binding.activityInput.text.toString())
}
})
return binding.root
}
解决方案
你在扩展ItemTouchHelper.SimpleCallback
,而不是ItemTouchHelper
它本身。如果您查看Callback 类的文档,您会发现它没有任何attachRecyclerView(..)
方法。
推荐阅读
- qt - Drag and Drop mechanism in qml
- f# - 如何在 F# 中组合 Result<> 列表?
- r - R - 在不同的箱线图中为每个组保持相同的颜色
- android - mediaMetaDataRetriver.setDataSource(字符串路径)在 Android Studio 中不起作用
- python - python 导入“未定义符号:mysql_query”上的 SWIG 错误
- python-3.x - django 以下数据将已提交到服务器
- javascript - 两个页面之间的过渡有效,但两个页面始终使用相同的 CSS
- android - Android Studio 和 SonarQube 中可用的 Lint 选项有什么区别?
- xamarin - 如何在 xamarin 表单注册中获取电话号码
- javascript - 使用构造函数的 JUnit 测试失败