【问题标题】:Dynamically setting visibility of textview in recyclerview在recyclerview中动态设置textview的可见性
【发布时间】:2018-08-15 23:58:35
【问题描述】:

我有一个回收站视图,其中第一个项目必须有一个标题。我目前实现它的方式是获取适配器位置,如果它是 0,那么我将包含标题的 textview 设置为可见并将其设置为任何其他值。 但是,当我通过 notifyItemRemoved 删除第一项时,标题在新的第一项上不可见(即以前的第二项)。谁能告诉我我需要做什么?

更新:我的意思是我在视图本身中有标题文本,我需要根据视图是否是 recyclerview 中的第一个来切换可见性。

所以目前我在 onBindViewHolder 方法中切换可见性,在该方法中我检查位置是否为 0,然后将标题可见性设置为 View.VISIBLE,否则设置为 VIEW.GONE。但是,为了在我对适配器进行任何更改时使其正常工作,那么我需要再次重新创建整个适配器并将其设置为回收器视图。

很抱歉没有发布代码,但其中包含一些我无法透露的敏感信息

【问题讨论】:

  • 你应该从发布相关代码开始。
  • 你在什么时候执行第一个逻辑。如果它在适配器中,那么发生的情况是,逻辑已经执行,并且在您 notifyItemRemoved 后不会生效。可能从列表中删除该项目并再次设置回收者视图列表

标签: android android-recyclerview


【解决方案1】:
 @Override
public void onBindViewHolder(MyViewHolder holder, int position) {



    if(position==5) {
       holder.textview.setVisibility(View.GONE);
    }
}

【讨论】:

    【解决方案2】:

    您必须使用getItemViewType(int position) 方法来决定应该在什么位置。

    private static final int HEADER = 0;
    private static final int ITEMS = 1;
    @Override
    public int getItemViewType(int position) {
    
        if (position == 0) {
            return HEADER;
        } else {
            return ITEMS;
        }
    }
    

    getItemCount() 中,您必须再添加一项,因为我们有标题

     @Override
    public int getItemCount() {
        return sections.size() + 1;
    }
    

    【讨论】:

    • 感谢您的回复。然而,标题不是一个单独的视图,而只是一个文本视图,当视图位于第一个位置时应该自动变得可见
    【解决方案3】:

    谢谢大家的回答。 但是,他们还没有解决我的问题,至少现在我已经通过使用 recyclerview 的布局管理器来获取视图位置来解决它,如果要删除的视图的位置是 0,那么我设置标题 textview使第二个视图可见并调用 notifyItemRemoved。如果位置不是 0,那么我只需调用 notifyItemRemoved。

    【讨论】:

      猜你喜欢
      • 2017-11-15
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多