Удалить строку из RecyclerView
У меня есть фрагмент реселлера в фрагменте, и я реализовал в нем салфетки для удаления.
Пожалуйста, найдите код ниже:
fragment.kt
private lateinit var mBinding: FragmentToDoBinding
private lateinit var mToDoViewModel: ToDoViewModel
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_to_do, container, false)
configureScreenAppearance()
val application = requireNotNull(this.activity).application
val dataSource = LifestyleDatabase.getInstance(application).toDoDao
val viewModelFactory = ToDoViewModelFactory(dataSource, application)
mToDoViewModel = ViewModelProviders.of(this, viewModelFactory).get(ToDoViewModel::class.java)
mBinding.lifecycleOwner = this
val adapter = ToDoAdapter()
mBinding.RecyclerViewFromFragmentToDoMain.adapter = adapter
mToDoViewModel.toDos.observe(viewLifecycleOwner, Observer {
it?.let { x ->
//Update the UI and determine whether recyclerview should be visible or not
updateUI(x.isNotEmpty())
adapter.submitList(x)
}
})
val swipeHandler = object : SwipeToCallback(requireContext()) {
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
//Delete the item
}
}
val itemTouchHelper = ItemTouchHelper(swipeHandler)
itemTouchHelper.attachToRecyclerView(mBinding.RecyclerViewFromFragmentToDoMain)
return mBinding.root
}
ToDoAdapter.kt
class ToDoAdapter : ListAdapter<ToDo, ToDoAdapter.ViewHolder>(ToDoDiffCallback()) {
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val toDo = getItem(position)
holder.bind(toDo)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder.from(parent)
}
class ViewHolder private constructor(val binding: CustomRecyclerviewListTodoBinding): RecyclerView.ViewHolder(binding.root){
fun bind(toDo: ToDo) {
binding.myToDo = toDo
binding.executePendingBindings()
}
companion object {
fun from(parent: ViewGroup): ViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val binding = CustomRecyclerviewListTodoBinding.inflate(layoutInflater, parent, false)
return ViewHolder(binding)
}
}
}
}
class ToDoDiffCallback: DiffUtil.ItemCallback<ToDo>(){
override fun areItemsTheSame(oldItem: ToDo, newItem: ToDo): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: ToDo, newItem: ToDo): Boolean {
return oldItem == newItem
}
}
Мне нужно удалить строку, которая была проведена в методе здесь:
val swipeHandler = object : SwipeToCallback(requireContext()) {
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
//Delete the item
}
}
Но я не могу найти способ сделать это. Может кто-нибудь помочь с рабочим кодом, пожалуйста?
Я пытался найти некоторые методы для удаления элемента в адаптере, но я не могу найти ни одного.
Пожалуйста помоги.
1 ответ
Вы можете использовать ItemTouchHelper.SimpleCallBack
ItemTouchHelper mIth = new ItemTouchHelper(
new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN,
ItemTouchHelper.LEFT) {
public boolean onMove(RecyclerView recyclerView,
ViewHolder viewHolder, ViewHolder target) {
}
public void onSwiped(ViewHolder viewHolder, int direction) {
// remove from adapter
}
});
И тогда только ты пишешь что-то подобное.
new ItemTouchHelper(mIth).attachToRecyclerView(mRecyclerView);