向上滚动 reyclerview android 时项目正在更新?

问题描述 投票:0回答:1

我正在制作一个应用程序,其中我必须将数据插入到 reyclerview 中,recyclerview 工作正常,但问题是当我向上滚动适配器时重新更新数据,因此为了解决此问题,代码看起来不错,但仍然遇到此问题...................................................... ..

基类

abstract class MultiViewModelBaseAdapter<M : Model, VDB : ViewDataBinding>(private var diffCallback: DiffUtil.ItemCallback<M>) : ListAdapter<M ,BaseViewHolder<VDB>>(diffCallback) {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder<VDB> {
        val inflator = LayoutInflater.from(parent.context)
        val binding = createBinding(viewType, inflator, parent)

        return BaseViewHolder(binding) 
    }

    abstract fun createBinding(viewType: Int, inflater: LayoutInflater, parent: ViewGroup) : VDB

    override fun onBindViewHolder(holder: BaseViewHolder<VDB>, position: Int) {
        bind(holder.mBinding, getItem(position), position)
        holder.mBinding.executePendingBindings()
    }

    abstract fun bind(binding: VDB, item: M, position: Int)


    abstract fun onDataChanged(values: Boolean)}
}

适配器

 class LanguageAdapter(
    private val context: Context,
    private val mViewModel: LanguageListViewModel,
    private val onClickListener: OnItemClickListener<String>
) : MultiViewModelBaseAdapter<LanguageSupportModel, ViewDataBinding>(diffCallback) {
    companion object {
        private val ADS = 1
        private val LANGUAGES = 2

        val diffCallback = object : DiffUtil.ItemCallback<LanguageSupportModel>() {
            override fun areItemsTheSame(
                oldItem: LanguageSupportModel,
                newItem: LanguageSupportModel
            ): Boolean = oldItem.dataId == newItem.dataId

            /**
             * Note that in kotlin, == checking on data classes compares all contents, but in Java,
             * typically you'll implement Object#equals, and use it to compare object contents.
             */
            override fun areContentsTheSame(
                oldItem: LanguageSupportModel,
                newItem: LanguageSupportModel
            ): Boolean = oldItem == newItem
        }
    }

    override fun getItemId(position: Int): Long {
        return position.toLong()
    }

    override fun getItemViewType(position: Int): Int {
        return position
    }

    override fun createBinding(viewType: Int, inflater: LayoutInflater, parent: ViewGroup): ViewDataBinding {
        return DataBindingUtil.inflate(inflater, R.layout.language_view, parent, false)
    }

    override fun bind(binding: ViewDataBinding, item: LanguageSupportModel, position: Int) {
        binding as LanguageViewDataBinding
        binding.apply {
            language = item
            //click
        }
    }

    override fun onDataChanged(values: Boolean) {}
}

碎片

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    val languageAdapter = LanguageAdapter(requireContext(), mViewModel, this ,lifecycleScope)
    languageAdapter.submitList(LanguageArray.arrayValues())
    reyclerview.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
    adapter = languageAdapter
}
android android-studio android-layout android-fragments
1个回答
0
投票

如果您在滚动中使用分页概念,那么它就会解决。

在JAVA或KOTLIN中我们可以实现..像..

  • 导入 androidx.viewpager.widget.PagerAdapter;

然后将其扩展为Adapter类。

public void addList(List<ClsList> list) {
    this.mResources = list;
    notifyDataSetChanged(); // also this main line
}

解决问题。 ☻♥ 玩得开心..

© www.soinside.com 2019 - 2024. All rights reserved.