Search code examples
javaandroidandroid-recyclerviewonclicklistener

android - OnClickListener not working for first click in recyclerview


I am working in a chat application for Android and I am using RecyclerView for listing the messages.

I have written the adapter, but I am having a problem with detecting when an element(TextView in this case) inside the layout is clicked.

This is my adapter:

public class ChatRoomThreadAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private class ViewHolder extends RecyclerView.ViewHolder {
        TextView message, timestamp;

        private ViewHolder(View view) {
            super(view);

            message = (TextView) itemView.findViewById(R.id.message); 
            timestamp = (TextView) itemView.findViewById(R.id.timestamp); 
        }

    }

    public ChatRoomThreadAdapter(Context mContext, ArrayList<Message> messageArrayList, String userId) {
        this.mContext = mContext;
        this.messageArrayList = messageArrayList;
        this.userId = userId;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView;
        itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat, parent, false);

        return new ViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {

        ((ViewHolder) holder).message.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (((ViewHolder) holder).timestamp.getVisibility() == View.GONE) {
                    ((ViewHolder) holder).timestamp.setVisibility(View.VISIBLE);
                } else {
                    ((ViewHolder) holder).timestamp.setVisibility(View.GONE);
                }

            }
        });

    }

    @Override
    public int getItemCount() {
        return messageArrayList.size();
    }
}

The current onClick works but I have to click twice on the message in order for the onClick to trigger. I have been searching and trying endless solutions for 3 days in order to fix this, but none of the solutions on the internet have worked so far.


Solution

  • Make sure you have both focusableInTouchMode & focusable disabled on the button. The first click will get the focus and the second click executes the onClickListener.

    .