Tag: 回收器适配器

我的RecyclerView没有得到适当的通知

我有一个RecyclerView活动和一个ViewModel类。 该活动在ViewModel中调用一个消耗Web服务的方法,并且还观察LiveData字段。 每次该方法从Web服务中取回一个项目时,都会将其设置为LiveData,因此Activity中的观察者将被通知,因此所有项目都将进入RecyclerView。 这是保证,这个流程正常工作,因为我可以在日志中看到,也在UI中。 当我在使用Web服务的方法中使用Thread.slepp(500)延迟时出现问题。 而不是把物品放入RecyclerView,然后等待500millis,然后再放一个,它等待500毫秒* numberOfItems,然后把它们一起画出来。 我可以保证ViewModel和LiveData设置没有问题,因为日志按预期的意义工作,它打印创建的项目标题,等待500毫秒,打印下一个。 所以问题只在于适配器,以及只有在方法调用完成后才通知它。 我的问题是,如何每次调用观察者时通知适配器? 这里是我的三个类的实现: RecipeList class RecipeList : LifecycleActivity() { var recipeList: MutableList<Recipe> = mutableListOf() var adapter: RecipeAdapter? = null var viewModel: RecipeViewModel? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_recipe_list) val ingredients = intent.getStringExtra("ingredients") val term = intent.getStringExtra("term") viewModel = ViewModelProviders.of(this).get(RecipeViewModel::class.java) val url = "http://www.recipepuppy.com/api/?i=${ingredients}onions,garlic&q=${term}" val […]

Android选择和取消选择适配器kotlin中的项目的问题?

我正在创建一个视图以分组的方式显示时间。 为此,我将项目分组在一个散列表中,并将其传递给活动。 从我的活动,我正在初始化父适配器以线性时尚显示列表。 在那个父适配器中,还有另一个子适配器,它具有时间项目,这些项目使用gridLayout管理器以网格方式显示。 当前场景的形象和问题如下: 现在的实际问题,我只想一次选择一次。 但是,正如你所看到的,不同的数组列表在这里有不同的选择。 当我从同一组中选择一个项目时,它工作正常。 但这并不是取消其他团体的时间。 我怎样才能做到这一点? 父适配器: class TimePickerAdapter(context: Context, arrTimeSlots: ArrayList<ListItem>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { val mContext = context val mList = arrTimeSlots override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder { return if (viewType == ListItem.TYPE_HEADER) { TimeHeaderHolder(LayoutInflater.from(parent?.context). inflate(R.layout.item_time_group, parent, false)) } else { TimeSlotsHolder(LayoutInflater.from(parent?.context). inflate(R.layout.item_time_child, parent, false)) } } override […]

Kotlin recyclerView不调用任何适配器方法

RecyclerView适配器使我不舒服 – 在应用程序运行期间,没有任何适配器方法的调用。 数据已在FileListPresenterImpl类中初始化,但没有任何调用。 请帮忙。 class FileListAdapter(val fileList: List<File>): RecyclerView.Adapter<FileListAdapter.ViewHolder>() { override fun onBindViewHolder(holder: ViewHolder, position: Int) { holder.bindData(fileList[position]) } override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder { var v = LayoutInflater.from(parent?.context).inflate(R.layout.row_item_file, parent, false) return ViewHolder(v) } override fun getItemCount(): Int = fileList.size class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) { fun bindData(file: File) { itemView.tvFileName.text = file.getFileName() […]