recyclerview一致性错误一个第一次刷新工作正常,第二次刷新获取错误。堆栈中没有行号。
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/parent_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:background="@color/white_color">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvPost"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:orientation="vertical"
android:paddingTop="19dp"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:spanCount="3" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
SwipeRefreshLayout swipeRefreshLayout = getView().findViewById(R.id.swipe_refresh_layout);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
viewModel.refresh();
}
});
class DiscoverAdapter(private val action: (b: Int?) -> Unit)
: PagedListAdapter<PostModel, RecyclerView.ViewHolder>(NewsDiffCallback) {
private val DATA_VIEW_TYPE = 1
private val FOOTER_VIEW_TYPE = 2
private var state = State.LOADING
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if (viewType == DATA_VIEW_TYPE) DiscoverViewHolder.create(parent) else ListFooterViewHolder.create(parent)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (getItemViewType(position) == DATA_VIEW_TYPE)
(holder as DiscoverViewHolder).bind(action, getItem(position))
else (holder as ListFooterViewHolder).bind(action, state)
}
override fun getItemViewType(position: Int): Int {
return if (position < super.getItemCount()) DATA_VIEW_TYPE else FOOTER_VIEW_TYPE
}
companion object {
val NewsDiffCallback = object : DiffUtil.ItemCallback<PostModel>() {
override fun areItemsTheSame(oldItem: PostModel, newItem: PostModel): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: PostModel, newItem: PostModel): Boolean {
return oldItem == newItem
}
}
}
override fun getItemCount(): Int {
return super.getItemCount() + if (hasFooter()) 1 else 0
}
private fun hasFooter(): Boolean {
return super.getItemCount() != 0 && (state == State.LOADING || state == State.ERROR)
}
fun setState(state: State) {
this.state = state
notifyItemChanged(super.getItemCount())
}
fun getData(position: Int): PostModel {
return getItem(position) as PostModel
}
}
class DiscoverViewHolder(view: View) : RecyclerView.ViewHolder(view) {
fun bind(retry: (x: Int?) -> Unit, postModel: PostModel?) {
val width = DeviceScreenUtil.getInstance().width
val newWidth = width / 3
val layoutParams = itemView.rl_main_layout.getLayoutParams()
layoutParams.height = Math.round(newWidth * 1.2f)
layoutParams.width = Math.round(newWidth.toFloat())
itemView.rl_main_layout.setPadding(3, 3, 4, 4)
itemView.rl_main_layout.setLayoutParams(layoutParams)
if (postModel != null) {
// itemView.tv_total_like.text = news.title
if (!postModel.thumbnail.isNullOrEmpty())
Picasso.get().load(postModel.thumbnail).into(itemView.iv_image)
itemView.setOnClickListener { retry(adapterPosition) }
if (postModel.likes > 0) itemView.tv_total_like.setText(postModel.likes.toString() + "")
}
}
companion object {
fun create(parent: ViewGroup): DiscoverViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_myprofile, parent, false)
return DiscoverViewHolder(view)
}
}
}
DiscoverAdapter discoverAdapter = DiscoverAdapter {
if (it == null) {
viewModel.retry()
} else {
click(it)
}
}
rvPost.adapter = discoverAdapter
viewModel.newsList.observe(this,
Observer {
discoverAdapter.submitList(it)
})
RecolyerView适配器中存在问题,我想您忘记了进行适配器。rNotifyDataChanged()刷新后再次设置数据时:)
请打印适配器代码
我正在开发一个应用程序,其中我使用了AppBarLayout和CollapsingToolbarLayout以及NestedScrollView。我已经成功地实现了这一点,并且运行良好。 现在我想做的是,在嵌套滚动视图上滑动(快速向上滑动)时,它应该完全滚动到顶部。类似地,在向屏幕底部滑动(快速向下滑动)时,它必须平滑地滚动到底部。然而现在,它只能卡在中间,这使它看起来很丑。我已经尝试了许多可用的
我正在使用查看寻呼机和片段。我有三个可旋转的标签。每个扩展片段。我希望他们在刷卡时刷新。如何实现这一点?现在,当我滑动时,选项卡不会刷新。 请帮忙
问题内容: 如何定期使用PHP刷新页面?如果我用PHP无法做到这一点,那么最好的推荐方案是什么? 问题答案: 您可以使用PHP来做到这一点: 它会刷新您的当前页面,如果需要将其重定向到另一个页面,请使用以下命令:
我有一个活动,带有一个可视页面,涵盖了整个活动。在这个ViewPager中是一个ListView,它只覆盖片段的底部。ListView可以识别滑动事件(您可以左右滑动项目),但当您想滑动列表项目时,ViewPager会切换页面,因此无法工作。有没有一种简单的方法来解决这个问题,这样ViewPager就不会收到列表中的触摸事件。 谢谢
假设有一个网页,它是显示现场比赛成绩或股票市场状况或货币兑换率。对于所有这些类型的页面,您需要定期刷新网页。 Java Servlet 提供了一个机制,使得网页会在给定的时间间隔自动刷新。 刷新网页的最简单的方式是使用响应对象的方法 setIntHeader()。以下是这种方法的定义: public void setIntHeader(String header, int headerValue
本文向大家介绍在Laravel中实现使用AJAX动态刷新部分页面,包括了在Laravel中实现使用AJAX动态刷新部分页面的使用技巧和注意事项,需要的朋友参考一下 AJAX相信大家都不陌生,有很多不同的Javascript Frameworks可以用来快速实现AJAX功能。那么今天我们一起来看一下如何在使用了PHP Frameworks的网站中使用AJAX来刷新页面的一小部分。 这里我使用的是jQ