首页 > 解决方案 > 使用新项目更新我的回收站视图时遇到问题

问题描述

所以我目前的主要问题是尝试将数据添加到我的回收站视图中。本质上,我创建了一个按钮,将字符串添加"hello"到列表中,然后尝试调用mAdapter.notifyItemInserted(dataSet.size). 它完美地添加到日志列表的末尾,但我只是不知道如何为其更新 UI。

目前我可以设法加载的唯一项目是我启动应用程序时创建的项目 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")
}

}

标签: androidkotlin

解决方案


更改 recycleView 项目列表后,您必须调用 notifyDatasetChanged。


推荐阅读