Я работал над своим приложением. На главном экране моего приложения у меня есть горизонтальный RecyclerView, который загружает изображение и имя под изображением из Firebase. Я хочу отправить пользователя на другой вид деятельности, когда пользователь нажимает на изображение, и я также хочу выделить изображение.
Моя проблема в том, что я использовал метод OnTouch в своем классе Adapter, чтобы выделить изображение, но когда я делаю это, оно только выделяет изображение при нажатии. Я хочу отправить пользователя на другой вид деятельности, а также хочу выделить изображение. Поэтому для этого я использовал intent в своем коде. Но когда я использую намерение в своем коде, он успешно отправляет пользователя к другому действию, но проблема заключается в том, что после перехода к другому действию, когда пользователь щелкает обратно, изображение все равно подсвечивается.
Итак, вывод заключается в том, что у меня проблема с кодом. Я хочу, чтобы, когда пользователь нажимает на изображение, оно выделяло изображение и отправляло пользователя на новую активность без ошибок.
Вот мой код : -
public class TrendingSongsAdapter extends RecyclerView.Adapter<TrendingSongsAdapter.ViewHolder> {
public static final String TAG = "RecyclerViewAdaper";
// private ArrayList<String> mNames = new ArrayList<>();
// private ArrayList<String> mImageUrls = new ArrayList<>();
private List<Upload> mUploads;
private OnItemListener mOnItemListener;
private Context mContext;
public TrendingSongsAdapter(Context context, List<Upload> uploads, OnItemListener onItemListener) {
// mNames = names ;
// mImageUrls = imageUrls;
mUploads = uploads;
mContext = context;
this.mOnItemListener = onItemListener;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.trending_song_items_view, parent, false);
return new ViewHolder(view, mOnItemListener);
}
@SuppressLint("ClickableViewAccessibility")
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
Upload uploadCurrent = mUploads.get(position);
holder.name.setText(uploadCurrent.getName());
Glide.with(mContext)
.asBitmap()
.load(uploadCurrent.getImageUri())
.centerCrop()
.into(holder.image);
holder.image.setOnTouchListener(new View.OnTouchListener() {
Rect rect;
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
holder.image.setColorFilter(Color.argb(50, 0, 0, 0));
rect = new Rect(view.getLeft(), view.getRight(), view.getTop(), view.getBottom());
}
if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
holder.image.setColorFilter(Color.argb(0, 0, 0, 0));
}
if (motionEvent.getAction() == MotionEvent.ACTION_MOVE) {
if (!rect.contains(view.getLeft() + (int) motionEvent.getX(), view.getTop() + (int) motionEvent.getY())) {
holder.image.setColorFilter(Color.argb(0, 0, 0, 0));
}
}
Intent intent = new Intent(mContext , D.class);
mContext.startActivity(intent);
return false;
}
});
}
@Override
public int getItemCount() {
return mUploads.size();
}
public interface OnItemListener {
void onItemClick(int position);
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView image;
TextView name;
OnItemListener onItemListener;
public ViewHolder(View itemview, OnItemListener onItemListener) {
super(itemview);
image = itemview.findViewById(R.id.image_view);
name = itemview.findViewById(R.id.name);
this.onItemListener = onItemListener;
itemview.setOnClickListener(this);
}
@Override
public void onClick(View view) {
onItemListener.onItemClick(getAdapterPosition());
}
}
}
Пожалуйста, помогите мне, если у вас есть какое-либо решение.
Спасибо за чтение моего вопроса.