gpt4 book ai didi

android - 根据自定义 View 适配器的TAG值获取Item的位置

转载 作者:行者123 更新时间:2023-11-30 01:13:37 26 4
gpt4 key购买 nike

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

问题:您如何知道哪个View 具有hidden01 的值?你怎么知道那个项目的哪个位置?或者你如何根据 hidden viewTAG 知道该项目的位置?

更新: 我的适配器只有以下代码,这也是我想要获取该项目位置的地方,请查看最后一个函数 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com