如何从适配器中获取位置并将其发送到活动。

问题描述 投票:0回答:1

我试图从适配器中获取点击项的位置,并将其发送到一个活动中,但似乎无法使其工作。

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]
android android-studio android-activity adapter recycler-adapter
1个回答
1
投票

当处理项目上的事件时,比如点击,你应该总是使用 getAdapterPosition() 方法,而不是 positiononBindViewHolder() 因为它没有更新。


1
投票

点击的项目位置在 Adapter 被保存在 getAdapterPosition()getPosition() 方法。两者之间是有区别的,你可以检查一下 此处. 我建议你用 getAdapterPosition() 每当你希望得到 Position 的方法。


1
投票

在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类中声明的。


1
投票

尝试 getAdapterPostion() 方法,并在你的适配器中实现监听器来传递给activity

© www.soinside.com 2019 - 2024. All rights reserved.