假设我有RecyclerView
,其中包含自定义视图适配器。每个项目都有一个隐藏视图,其视图的TAG
具有不同的值。例如,隐藏视图之一,其TAG
包含值hidden01
。
问题:您如何知道哪个View
的值为hidden01
?你怎么知道该项目的哪个位置?或者您如何知道该项目的位置基于TAG
的{{1}}?
更新:我的适配器只有以下代码,这也是我要获取该项目位置的位置,请参阅上一个函数hidden view
。
getPositionBaseOnTag
答案 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()。现在它看起来没用。