在 ViewHolder 布局之间切换

Switching between ViewHolder layouts

我有两个 ViewHolder 有两个不同的布局文件。我想做的是为给定的 ViewHolder 膨胀一个布局,然后在一秒钟后,用不同的布局重新膨胀它。

这是一些代码:

class MyAdapter(context: Context,
                          myList: List<MyUiModel> = emptyList(),
                          private val clickListener: MyListener)
: RecyclerView.ViewHolder(context, myList) {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
    val layoutInflater = LayoutInflater.from(parent.context)
    return when (viewType) {
        TYPE_A -> 
            MyViewHolder.TypeAViewHolder(
                    layoutInflater.inflate(R.layout.type_a, parent, false), clickListener)
        else -> MyViewHolder.TypeBViewHolder(
                    layoutInflater.inflate(R.layout.type_b, parent, false), clickListener)
    }
}

所以,每当我需要实例化 TypeAViewHolder 时,我都需要先膨胀 type_a 布局,然后我想膨胀 type_b 布局,这将取代 type_a 布局(两者之间会有淡出 in/fade 动画,我不需要帮助)。我很难按顺序膨胀布局。

我尝试了以下有无 Thread.sleep(1000L) 的方法。

TYPE_A -> {
    MyViewHolder.TypeBViewHolder(
                    layoutInflater.inflate(R.layout.type_b, parent, false), clickListener)

    MyViewHolder.TypeAViewHolder(
                    layoutInflater.inflate(R.layout.type_a, parent, false), clickListener)
}

但是当我将日志语句添加到我的 ViewHolder 时,只有列出的最后一个 (TypeAViewHolder) 被绑定到。

P.S。我知道我想做的事情很奇怪,但这是我的要求。

提前致谢!

您描述的情况可以使用MyViewHolder.post()方法解决。 通常 post 将等待 MyViewHolder 在屏幕上呈现布局 B,然后 运行 稍后在 post 方法中存在的代码。

TYPE_A -> {
    MyViewHolder.TypeBViewHolder(
                    layoutInflater.inflate(R.layout.type_b, parent, false), clickListener)

 MyViewHolder.post(new Runnable() {
            @Override
            public void run() {
                  // if you want a delay use Thread.sleep(1000L) here 
                   Thread.sleep(1000L);

                  //to inflate view after layout B is inflated and waited for 1sec
                   MyViewHolder.TypeAViewHolder(
                             layoutInflater.inflate(R.layout.type_a, parent, false), clickListener);
            }
        }); 

}

关于post方法在视图中:

我最终使用 ViewSwitcher 和一个 ViewHolder 来完成这个。在 ViewHolder 中,如果 itemViewViewSwitcher

类型,我会以不同的方式处理它