获取Item基于自定义视图适配器的TAG值的位置

时间:2016-07-03 17:07:44

标签: android android-recyclerview recycler-adapter

假设我有RecyclerView,其中包含自定义视图适配器。每个项目都有一个隐藏视图,其视图的TAG具有不同的值。例如,隐藏视图之一,其TAG包含值hidden01

问题:您如何知道哪个View的值为hidden01?你怎么知道该项目的哪个位置?或者您如何知道该项目的位置基于TAG的{​​{1}}?

更新:我的适配器只有以下代码,这也是我要获取该项目位置的位置,请参阅上一个函数hidden view

getPositionBaseOnTag

1 个答案:

答案 0 :(得分:1)

有两种方法可以做到这一点:

1)在getPositionBaseOnTag(String theTag)方法中循环theDataList,如果theTag与getHiddenTag()匹配,则返回该索引:

public int getPositionBaseOnTag(String theTag) {
  int length = theDataList.size();
  for (int i = 0; i < length; i ++) {
    if(theDataList.get(i).getHiddenTag().equals(theTag)) {
      return i;
    }
  }
  // unable to find the tag
  return -1;
}

我们在评论链中得出结论,这种方法对Seynal的需求无效。

2)制作一个pojo来保存标记和位置并将其存储为视图标记:

将此内部类添加到TheRecyclerAdapter:

private class TagPojo {
  int position;
  String tag;

  public TagPojo(int position, String tag) {
    this.position = position;
    this.tag = tag;
  }
}

然后在你的onBindViewHolder上执行此操作:

 @Override
    public void onBindViewHolder(final TheViewHolder holder, int position) {
        TheData theData = theDataList.get(position);
        holder.theHiddenView.setTag(new TagPojo(position, theData.getHiddenTag())); //Set the TAG of Hidden View here
    }

你的getPositionBaseOnTag()应如下所示:

public int getPositionBaseOnTag(TagPojo theTag) {
  return theTag.position;
}

此外,我不确定您的代码是如何编译的,但我认为您的onBindViewHolder方法需要更正:

 @Override
    public void onBindViewHolder(final TheViewHolder holder, int position) {
        TheData theData = theDataList.get(position);
        holder.theHiddenView.setTag(theData.getHiddenTag()); //Set the TAG of Hidden View here
    }

最后的挑剔,确保你在某个地方调用你的getPositionBaseOnTag()。现在它看起来没用。