首页 > 解决方案 > MVVM 架构上的 ItemTouchHelper

问题描述

我正在尝试对onSwiped我的.RecyclerViewviewadapter

我现在正在尝试在我的 上执行此操作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
    }

标签: androidkotlin

解决方案


你在扩展ItemTouchHelper.SimpleCallback,而不是ItemTouchHelper它本身。如果您查看Callback 类的文档,您会发现它没有任何attachRecyclerView(..)方法。


推荐阅读