假设我有一个包含自定义 View 适配器的 RecyclerView
。每个项目都有一个隐藏 View ,它的 View 有一个具有不同值的 TAG
。例如其中一个隐藏 View ,它的 TAG
包含一个值 hidden01
。
问题:您如何知道哪个View
具有hidden01
的值?你怎么知道那个项目的哪个位置?或者你如何根据 hidden view
的 TAG
知道该项目的位置?
更新: 我的适配器只有以下代码,这也是我想要获取该项目位置的地方,请查看最后一个函数 getPositionBaseOnTag
。
public class TheRecyclerAdapter extends RecyclerView.Adapter<TheRecyclerAdapter.TheViewHolder> {
private Context mContext;
private List<TheData> theDataList;
public class TheViewHolder extends RecyclerView.ViewHolder{
TextView theHiddenView;
public TheViewHolder(View itemView) {
super(itemView);
theHiddenView = (TextView) itemView.findViewById(R.id.hiddenView);
}
}
public TheRecyclerAdapter(Context context, List<TheData> theDatalist){
this.mContext = context;
this.theDataList = theDatalist;
}
@Override
public TheViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_view_adapter, parent, false);
return new TheViewHolder(itemView);
}
@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
}
@Override
public int getItemCount() {
return theDataList.size();
}
public void deletePosition(int position){
theDataList.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position,theDataList.size());
}
public void removeTheItem(){
deletePosition(getPositionBaseOnTag("my_tag"));
}
/***Here where I want to return the position of that Item base on TAG**/
public int getPositionBaseOnTag(String theTag){
int itemPosition;
//Find the View base on TAG
//Get the Position
//Done
return itemPosition;
}
}
最佳答案
有两种方法可以做到这一点:
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来保存标签和位置并将其存储为 View 标签:
将这个内部类添加到 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() 。现在它看起来没用过。
关于android - 根据自定义 View 适配器的TAG值获取Item的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38172339/