代码之家  ›  专栏  ›  技术社区  ›  liminal

在ViewHolder布局之间切换

  •  0
  • liminal  · 技术社区  · 6 年前

    我有两个 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

    我试了以下有和没有 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)
    }
    

    但是当我把日志语句添加到 取景器 s、 只列出最后一个( )一定会的。

    另外,我知道我想做的是一件奇怪的事情,但这是我的一个要求。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Anmol    6 年前

    你所描述的情况可以通过使用MyViewHolder.post文件()方法。 一般来说,post将等待MyViewHolder呈现布局 然后稍后运行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方法: https://stackoverflow.com/a/13840315/7972699

        2
  •  0
  •   liminal    6 年前

    最后我用了 ViewSwitcher 用一个 ViewHolder 为了达到这个目的。在 我来处理 itemView 视图转换器