Получение проблемы в событиях OnTouch и onClick в моем классе Adapter моего Recycler View - PullRequest
0 голосов
/ 14 января 2020

Я работал над своим приложением. На главном экране моего приложения у меня есть горизонтальный 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());
        }
    }

}

Пожалуйста, помогите мне, если у вас есть какое-либо решение.

Спасибо за чтение моего вопроса.

1 Ответ

0 голосов
/ 14 января 2020

Попробуйте добавить еще к каждому условию if и сбросить состояние изображения, в вашем случае вы хотите удалить выделение из него

            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());
            }
             else{ // set here image resource}
            if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
                holder.image.setColorFilter(Color.argb(0, 0, 0, 0));
            }
              else{// set here image resource} 
            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));
                }
                    else{// set here image resource}
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...