Я думаю, что вы подходите к этому неправильно. Вам нужен метод publi c для вашего адаптера, в котором сохраняется позиция, выбранная из onPageSelected()
вашего viewpager2 и в методе onBindViewHolder()
вашего адаптера, просто используйте проверку для выбора используемого фона.
Я сделал изменения в вашем адаптере, как показано ниже:
public class InsideRoomAdapter extends RecyclerView.Adapter<InsideRoomAdapter.ViewHolder> {
private Context context;
private List<Integer> list;
//moved ImageView to ViewHolder class as private
private int selectedPosition; //the int value for keeping track of your selected position
public InsideRoomAdapter(Context context,List<Integer> list) {
this.context = context;
this.list = list;
this.selectedPosition = 0; //initialize it here
}
@NonNull
@Override
public InsideRoomAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.inside_room_items,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull InsideRoomAdapter.ViewHolder holder, int position) {
/* Since ImageView was moved reference it from the holder like below
* Use a simple check to verify it the adapter position matches with the selectedPosition
* if so simply set the backgrounds as required
*/
if(position == selectedPosition) {
holder.imageView.setBackground(ContextCompat.getDrawable(context,R.drawable.selected_light_bg));
} else {
holder.imageView.setBackground(ContextCompat.getDrawable(context,R.drawable.inside_room_item_bg));
}
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,"light clicked",Toast.LENGTH_LONG).show();
}
});
}
public void setSelectedPosition(int newPosition) {
this.selectedPosition = newPosition;
notifyDataSetChanged();
/* If you require better animations make use of notifyItemChanged() instead
* save selectedPosition value in a temp variable before swap
* and call notifyItemChanged() for both positions old and new
*/
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private ImageView imageView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.inside_light_img);
}
}
}
И тогда вместо того, чтобы усложнять ваш код, ваш onPageSelected()
должен выглядеть примерно так
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
insideRoomAdapter.setSelectedPosition(position);
}
Вот и все, дайте нам знать если этот ответ помог решить вашу проблему.