如何从 onCreateViewHolder 获取位置
How to get position from onCreateViewHolder
我有一个 RecylerView 适配器,我在其中处理 onCreateViewHolder 方法中的 onClicks,但是我无法找到获取当前位置的方法。我当前的方法如下所示:
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_small, parent, false);
return new ViewHolder(itemView, new ViewHolder.IViewHolderClicks() {
@Override
public void onImage(ImageView image) {
// Need the position for logic in here
// for example, myArrayList.get(position);
}
});
}
有人知道如何从 onCreateViewHolder 中访问当前位置吗?
onCreateViewHolder()
不是存储位置的合适位置。当 ViewHolder 被回收时,您将不会再调用 onCreateViewHolder()
,因此您将没有机会 "fix" ViewHolder 被回收时的位置。
您可以改为在 onBindViewHolder()
中执行此操作,它将位置作为其参数之一,并在每次回收 ViewHolder 时调用。
在您的 onClick 处理程序中,调用 viewHolder.getAdapterPosition()。
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_small, parent, false);
final ViewHolder vh = ViewHolder(itemView, new ViewHolder.IViewHolderClicks() {
@Override
public void onImage(ImageView image) {
int position = vh.getAdapterPosition();
}
});
return vh;
}
我有一个 RecylerView 适配器,我在其中处理 onCreateViewHolder 方法中的 onClicks,但是我无法找到获取当前位置的方法。我当前的方法如下所示:
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_small, parent, false);
return new ViewHolder(itemView, new ViewHolder.IViewHolderClicks() {
@Override
public void onImage(ImageView image) {
// Need the position for logic in here
// for example, myArrayList.get(position);
}
});
}
有人知道如何从 onCreateViewHolder 中访问当前位置吗?
onCreateViewHolder()
不是存储位置的合适位置。当 ViewHolder 被回收时,您将不会再调用 onCreateViewHolder()
,因此您将没有机会 "fix" ViewHolder 被回收时的位置。
您可以改为在 onBindViewHolder()
中执行此操作,它将位置作为其参数之一,并在每次回收 ViewHolder 时调用。
在您的 onClick 处理程序中,调用 viewHolder.getAdapterPosition()。
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_small, parent, false);
final ViewHolder vh = ViewHolder(itemView, new ViewHolder.IViewHolderClicks() {
@Override
public void onImage(ImageView image) {
int position = vh.getAdapterPosition();
}
});
return vh;
}