我正在将我的代码从使用< code>androidx.viewpager更新为< code>androidx.viewpager2。我正在翻阅一个不确定数量的片段,这些片段显示了从数据库中检索到的数据记录。加载视图分页器并对我的数据进行分页运行得很好,但是我在删除项目和更新分页器适配器时遇到了一些问题。我想通过调用我的适配器上的< code>removeItem()方法(参见下面的代码)在任何给定位置删除一个项目。这应该会从我的数据库和我的片段中删除项目,然后更新视图。
结果是从数据库中删除正确的项。但它不会从我的视图寻呼机中删除预期的片段,而是从下一页中删除。当前页面仍然可见。我有点用正负1来抵消位置,但没有成功 - 相反:在这些情况下,我的删除例程按最初预期执行。我也尝试了类似的考虑因素,例如在这里。
我希望实现以下行为:
我的适配器代码:
internal class ShapePagerAdapter(private val activity: AppCompatActivity) : FragmentStateAdapter(activity) {
private val dbManager: DatabaseManager
private var shapeIds: MutableList<String>? = null
init {
dbManager = DatabaseManager(activity)
try {
shapeIds = dbManager.getShapeIds()
} catch (e: DatabaseAccessException) {
// ...
}
}
override fun getItemCount(): Int {
return if (null != shapeIds) shapeIds!!.size else 0
}
override fun createFragment(position: Int): Fragment {
return ShapeFragment.newInstance(shapeIds!![position])
}
fun removeItem(activity: AppCompatActivity, position: Int) {
try {
// Remove from Database.
dbManager.deleteShape(shapeIds!![position])
// Remove from View Pager.
shapeIds!!.removeAt(position)
notifyItemRemoved(position)
notifyItemRangeChanged(position , itemCount)
// Close if nothing to show anymore.
if (itemCount == 0) {
activity.finish()
}
} catch (e: DatabaseAccessException) {
// ...
}
}
}
对< code > FragmentStateAdapter 的进一步研究表明,在这种情况下必须重写它的两个方法:
包含项目(长itemId)
和getItemId(int位置)
默认实现适用于不添加、移动或移除项的集合。
在搜索中,我找到了一个类似问题的答案,为我指明了正确的方向。它没有产生我问题中给出的确切行为,这就是为什么我发布了一个稍微改编的版本。
关键是这两种方法是在项目序列可能发生变化的情况下实现的。为了启用此功能,我维护了项目和项目ID的映射,并在序列发生变化时更新,在这种情况下是删除的项目。
internal class ShapePagerAdapter(private val activity: AppCompatActivity) : FragmentStateAdapter(activity) {
private val dbManager: DatabaseManager
private lateinit var shapeIds: MutableList<String>
private lateinit var itemIds: List<Long>
init {
dbManager = DatabaseManager(activity)
try {
shapeIds = dbManager.getShapeIds()
updateItemIds()
} catch (e: DatabaseAccessException) {
// ...
}
}
override fun getItemCount(): Int = shapeIds.size
override fun createFragment(position: Int): Fragment = ShapeFragment.newInstance(shapeIds[position])
fun removeItem(activity: AppCompatActivity, position: Int) {
try {
dbManager.deleteShape(shapeIds[position])
shapeIds.removeAt(position)
notifyItemRemoved(position)
notifyItemRangeChanged(position , itemCount)
updateItemIds()
if (itemCount == 0) activity.finish()
} catch (e: DatabaseAccessException) {
// ...
}
}
private fun updateItemIds() {
itemIds = shapeIds.map { it.hashCode().toLong() }
}
override fun getItemId(position: Int): Long = shapeIds[position].hashCode().toLong()
override fun containsItem(itemId: Long): Boolean = itemIds.contains(itemId)
}
}
问题内容: 我是React的新手,制作了一个可以保存搜索的应用程序。这将提取JSON,但当前正在从静态数组中提取。我无法从搜索列表中删除搜索。 这是jsbin:http://jsbin.com/nobiqi/edit?js,输出 这是我的删除按钮元素: 和我的功能 我尝试了以下教程,但不确定从这里开始。如何删除搜索项目? 问题答案: 我猜,您是否正在寻找类似的东西? 在此示例中,请注意我如何绑定方
本文向大家介绍sharepoint 删除列表中的项目,包括了sharepoint 删除列表中的项目的使用技巧和注意事项,需要的朋友参考一下 示例
我有一个假设,它有8个项目A-H,现在我想从中删除存储在int数组中的1,3,5位置项目。我该怎么做。 我正试着和你一起做这件事 但在数组的第一个被删除的项被更改之后,在下一次迭代中它删除了错误的元素或给出异常。
我正面临一个问题,我无法删除RecycerView中的一个项目。我试图在互联网上搜索,但无法看到任何解决方案,我遵循这篇文章Android Recycerview添加和删除项目,但我仍然无法删除下面选择的项目是我的适配器和碎片的代码 RecyclerViewAdapter.java
我对下面的Java程序有问题。我在Ubuntu系统上使用带有JDK-1.8u25的JavaFX。我想显示一个ListView,并从列表中删除突出显示的条目。我创建了一个列表,并将其与一个可观察列表配对,以通知侦听器事件。然而,通过删除下面的“orderOvList.remove(i,i 1)”项来更改列表似乎会生成另一个侦听器事件。所以,我似乎在侦听器代码的主体中递归。我想过将list元素从nor
我正在用C#WPF做一个项目,它包含在一个客户机管理中,在那里我添加了新的客户机,在一个txt文档中有save,我有一个listview,在那里我可以看到所有添加的客户机,但现在我想实现一个delete按钮,在那里我从listview中选择一个客户机,并可以删除它。如果我现在做的正确,如果有人能帮我…,…谢谢。