我试图从适配器中获取点击项的位置,并将其发送到一个活动中,但似乎无法使其工作。
public void onBindViewHolder(@NonNull HomeViewHolder holder, int position) {
...
...
}
我试着从onBindViewHolder中获取位置,然后将其发送到活动中,并在一个数组中调用它。
private int[] images = {R.raw.glasses1, R.raw.glasses3, R.raw.glasses4, R.raw.glasses5,
R.raw.glasses6, R.raw.glasses7, R.raw.glasses8, R.raw.glasses9, R.raw.glasses10};
然后调用
images[position]
当处理项目上的事件时,比如点击,你应该总是使用 getAdapterPosition()
方法,而不是 position
在 onBindViewHolder()
因为它没有更新。
点击的项目位置在 Adapter
被保存在 getAdapterPosition()
和 getPosition()
方法。两者之间是有区别的,你可以检查一下 此处. 我建议你用 getAdapterPosition()
每当你希望得到 Position
的方法。
在onBindViewHolder()中,我创建了如下的onListener()方法,然后在onCreate()方法中得到活动中的数据,如下所示。
@Override
public void onBindViewHolder(@NonNull HomeViewHolder holder, int position) {
...
...
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos=holder.getAdapterPosition();
Intent intent = new Intent(v.getContext(), ArActivity.class);
intent.putExtra("pos",pos);
}
});
}
然后在onCreate()方法中获取活动中的数据,如下所示。
@Override
protected void onCreate(Bundle savedInstanceState){
Bundle extras = getIntent().getExtras();
if(extras!=null){
pos=extras.getInt("pos");
}
其中'pos'是在activity类中声明的。
尝试 getAdapterPostion()
方法,并在你的适配器中实现监听器来传递给activity