Итак, моя основная проблема на данный момент - это попытка добавить данные в мой вид ресайклера. По сути, я создал кнопку, которая добавляет строку "hello"
в список, а затем пытается вызвать mAdapter.notifyItemInserted(dataSet.size)
. Он отлично добавляется в конец списка в журналах, но я просто не могу понять, как обновить для него пользовательский интерфейс.
Единственные элементы, которые мне удалось загрузить на данный момент, - это элементы fakeItems которые создаются при запуске приложения.
class MainActivity : AppCompatActivity() {
var dataSet = mutableListOf<String>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
insertFakeItems()
setUpRecycler()
}
private fun insertFakeItems() {
for (i in 0..5) {
dataSet.add("Item #$i")
}
}
private fun setUpRecycler() {
val mAdapter = MyAdapter(dataSet)
val mList = list
mList.layoutManager = LinearLayoutManager(this)
mList.adapter = mAdapter
mList.orientation =
DragDropSwipeRecyclerView.ListOrientation.VERTICAL_LIST_WITH_VERTICAL_DRAGGING
//mList.disableSwipeDirection(DragDropSwipeRecyclerView.ListOrientation.DirectionFlag.RIGHT)
// button
val onItemSwipeListener = object : OnItemSwipeListener<String> {
override fun onItemSwiped(
position: Int,
direction: OnItemSwipeListener.SwipeDirection,
item: String
): Boolean {
Log.d("Main", "Position = $position, Direction = $direction, Item = $item")
when (direction) {
OnItemSwipeListener.SwipeDirection.RIGHT_TO_LEFT -> {
Toast.makeText(applicationContext, "Item ${position+1} deleted", Toast.LENGTH_SHORT).show()
//todo: add deleted code here
}
OnItemSwipeListener.SwipeDirection.LEFT_TO_RIGHT -> {
Toast.makeText(applicationContext, "Item ${position+1} archived", Toast.LENGTH_SHORT).show()
//todo: add archived code here
}
}
return false
}
}
mList.swipeListener = onItemSwipeListener
fab_add.setOnClickListener {
Log.d("Main", "Button pressed")
dataSet.add(dataSet.size,"hello")
mAdapter.notifyItemInserted(dataSet.size)
println(dataSet)
}
}
}
А это адаптер:
class MyAdapter(dataSet: MutableList<String>)
: DragDropSwipeAdapter<String, MyAdapter.ViewHolder>(dataSet) {
class ViewHolder(itemView: View) : DragDropSwipeAdapter.ViewHolder(itemView) {
val itemText: TextView = itemView.findViewById(R.id.item_text)
val dragIcon: ImageView = itemView.findViewById(R.id.drag_icon)
}
override fun getViewHolder(itemLayout: View) = MyAdapter.ViewHolder(itemLayout)
override fun onBindViewHolder(item: String, viewHolder: MyAdapter.ViewHolder, position: Int) {
viewHolder.itemText.text = item
}
override fun getViewToTouchToStartDraggingItem(item: String, viewHolder: MyAdapter.ViewHolder, position: Int): View? {
return viewHolder.dragIcon
}
override fun onDragFinished(item: String, viewHolder: ViewHolder) {
super.onDragFinished(item, viewHolder)
println("$dataSet")
}
}