android - 使用新项目更新我的回收站视图时遇到问题
问题描述
所以我目前的主要问题是尝试将数据添加到我的回收站视图中。本质上,我创建了一个按钮,将字符串添加"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")
}
}
解决方案
更改 recycleView 项目列表后,您必须调用 notifyDatasetChanged。
推荐阅读
- excel - 如何解决 Excel 中的潜在处理问题?
- android - React Native 构建失败,无法找到请求目标错误的有效证书路径
- mysql - 如何构建用于连接数据库(8080)和超集的 SQLAlchemy URI?
- kubernetes - 我需要在 grafana 应用程序日志仪表板的搜索框中传递多个值
- php - 从 android 接收的编码字符串中检索 PHP 中的文件 url
- angular - 在Angular中使用XLSX(表格到表格)导出html表格时隐藏/删除行
- facebook - 不支持的获取请求。ID 为“XXXXX”的对象不存在,由于缺少权限而无法加载,或不支持此操作
- angular - 如何包含一个额外的 css 文件?
- jenkins - 找不到war文件但在目标文件夹中退出
- kubernetes - 导入带有子图表值的父模板