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

时间:2020-05-04 10:29:53

标签: android android-studio android-activity adapter android-recyclerview

我正在尝试从适配器获取被单击项的位置,并将其发送到活动中,但似乎无法使其正常工作。

UPDATE `machines` SET `created_at` = '2020-05-01T16:17:25.911Z',`created_by` = '1',`deleted_at` = '',`fileuploadedId` = '',`frm21_submit` = 'null',`machine_category_id` = '6f898735-7c38-4d7b-b7c7-ad006970d16e,72e297d2-7a8a-4e1c-89f9-63dee6a3af33',`demoIds` = '1234',`modeluploadedId` = '',`name` = 'sdsadasdasdsad',`status` = 'ACTIVE',`type` = 'equipment',`unique_id` = 'MAC1587349845912',`updated_at` = '2020-05-04T10:19:03.651Z' WHERE meta().id = 'a3782c33-38ca-47ea-a8b7-2dd529

我试图从onBindViewHolder获取位置,然后将其发送到活动并在数组中调用它:

public void onBindViewHolder(@NonNull HomeViewHolder holder, int position) {
...
...
}

然后致电

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}; 

4 个答案:

答案 0 :(得分:1)

在适配器中尝试getAdapterPostion()方法并实现侦听器以传递给活动

答案 1 :(得分:1)

在处理诸如单击之类的事件时,应始终使用holder对象的getAdapterPosition()方法,而不要使用position中的onBindViewHolder(),因为它不会更新。

答案 2 :(得分:1)

Adapter中单击的项目位置以getAdapterPosition()getPosition()方法保存。两者之间有区别,您可以检查here。我建议您在需要获取点击的项目getAdapterPosition()时使用Position

答案 3 :(得分:1)

它使用getAdapterPosition()方法工作。在onBindViewHolder()内部,我创建了onListener()方法,如下所示:

 @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”。