ItemTouchHelper на архитектуре MVVM [решено] - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь реализовать удаление 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
    }

1 Ответ

1 голос
/ 07 июля 2019

Вы расширяете ItemTouchHelper.SimpleCallback, а не ItemTouchHelper. Если вы посмотрите на документы для класса Callback , то увидите, что в нем нет метода attachRecyclerView(..).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...