No toast shown when clicking RecyclerView item

Ok, I know, probably someone has already asked this question. I already found a possible solution for my problem on this link . But for some unknown reason, this solution doesn't work for me. I want to show Toast

when element (a CardView

) is clicked inside RecyclerView

. This one Toast

should show me the position of the selected item. When I click on CardView

, I see a ripple, so that means the card is being pressed - but unfortunately I don't see toasts. Can someone explain to me why? Thanks in advance.

This is my adapter:

public class MainRecyclerViewAdapter extends RecyclerView.Adapter<MainRecyclerViewAdapter.MyMainViewHolder> {


private List<Information> mainInfo;
MyDatabase myDatabase;


public MainRecyclerViewAdapter(List<Information> mainInfo) {
    this.mainInfo = mainInfo;
}

public static class MyMainViewHolder extends RecyclerView.ViewHolder {
    TextView titleTextView, notesTextView, dateTextView, timeTextView;
    ImageView imageView;
    LinearLayout linearLayout;

    public MyMainViewHolder(View itemView) {
        super(itemView);
        linearLayout = (LinearLayout) itemView.findViewById(R.id.mainLayout);
        imageView = (ImageView) itemView.findViewById(R.id.imgIcon);
        titleTextView = (TextView) itemView.findViewById(R.id.title_TextView);
        notesTextView = (TextView) itemView.findViewById(R.id.notes_TextView);
        dateTextView = (TextView) itemView.findViewById(R.id.date_TextView);
        timeTextView = (TextView) itemView.findViewById(R.id.time_TextView);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(), "Position: " + Integer.toString(getAdapterPosition()), Toast.LENGTH_LONG).show();
            }
        });

    }

}



@Override
public MyMainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_single_raw, parent, false);
    MyMainViewHolder holder = new MyMainViewHolder(v);
    return holder;
}

public void delete(int position){
    mainInfo.remove(position);
    notifyItemRemoved(position);
}

@Override
public void onBindViewHolder(final MyMainViewHolder holder, final int position) {
    holder.imageView.setImageResource(mainInfo.get(position).getICON_ID());
    holder.titleTextView.setText(mainInfo.get(position).getTITLE());
    holder.notesTextView.setText(mainInfo.get(position).getNOTES());
    holder.dateTextView.setText(mainInfo.get(position).getDATE());
    holder.timeTextView.setText(mainInfo.get(position).getTIME());


}




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

      

This is my cardView layout file:

<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_view1"
android:clickable="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
card_view:cardCornerRadius="3dp"
android:layout_margin="5dp">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="0.5dp"
    android:clickable="true"
    android:background="?android:selectableItemBackground"
    android:orientation="horizontal"
    android:weightSum="10">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">


        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:layout_marginLeft="16dp"
            android:layout_weight="8.5">

            <TextView
                android:id="@+id/title_TextView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="5dp"
                android:layout_marginLeft="0dp"
                android:layout_marginRight="8dp"
                android:layout_marginTop="5dp"
                android:text="Title"
                android:fontFamily="sans-serif-light"
                android:textColor="#F57C00"
                android:textSize="25sp"
                />



        </RelativeLayout>

        <View
            android:layout_width="fill_parent"
            android:id="@+id/divider1"
            android:layout_height="0.1dp"
            android:layout_below="@+id/title_TextView"
            android:background="@android:color/darker_gray"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="fill_parent"
                android:layout_marginLeft="16dp"
                android:layout_weight="8.5">

                <ImageView
                    android:id="@+id/imgIcon"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true"
                    android:src="@mipmap/ic_alarm_check_grey600_48dp" />


            </RelativeLayout>


            <LinearLayout
                android:id="@+id/linear"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1.5"
                android:orientation="vertical">


                <TextView
                    android:id="@+id/notes_TextView"
                    android:paddingTop="5dp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="5dp"
                    android:layout_marginLeft="16dp"
                    android:layout_marginRight="8dp"
                    android:text="notes"
                    android:textColor="#ff565656"
                    android:textSize="12sp" />

                <TextView
                    android:id="@+id/date_TextView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="5dp"
                    android:layout_marginLeft="16dp"
                    android:layout_marginRight="8dp"
                    android:text="date"
                    android:textColor="#ff565656"
                    android:textSize="12sp" />

                <TextView
                    android:id="@+id/time_TextView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="5dp"
                    android:layout_marginLeft="16dp"
                    android:layout_marginRight="8dp"
                    android:text="time"
                    android:textColor="#ff565656"
                    android:textSize="12sp" />


            </LinearLayout>


        </LinearLayout>


    </LinearLayout>


</LinearLayout>

      

+3


source to share


4 answers


Problem solved! This is the working code:

public static class MyMainViewHolder extends RecyclerView.ViewHolder {
    TextView titleTextView, notesTextView, dateTextView, timeTextView;
    ImageView imageView;
    LinearLayout linearLayout;

    public MyMainViewHolder(final View itemView) {
        super(itemView);
        linearLayout = (LinearLayout) itemView.findViewById(R.id.mainLayout);
        imageView = (ImageView) itemView.findViewById(R.id.imgIcon);
        titleTextView = (TextView) itemView.findViewById(R.id.title_TextView);
        notesTextView = (TextView) itemView.findViewById(R.id.notes_TextView);
        dateTextView = (TextView) itemView.findViewById(R.id.date_TextView);
        timeTextView = (TextView) itemView.findViewById(R.id.time_TextView);



        itemView.setClickable(true);
        itemView.setFocusableInTouchMode(true);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Toast.makeText(itemView.getContext(), "Position: " + Integer.toString(getAdapterPosition()), Toast.LENGTH_LONG).show();
            }
        });

        linearLayout.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {

                Toast.makeText(itemView.getContext(), "Position: " + Integer.toString(getAdapterPosition()), Toast.LENGTH_LONG).show();
            }

        });

    }

}

      



So if I click on the linearLayout - so the whole cardView - I can see its position!

Credits: link

+4


source


Add the following line to your view.xml     android:clickable=true



Remove the following line from the first LinearLayout   android:clickable="true"

+1


source


try this,
@Override
public MyMainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_single_raw, parent, false);
    MyMainViewHolder holder = new MyMainViewHolder(v);
    return holder;
}

public void delete(int position){
    mainInfo.remove(position);
    notifyItemRemoved(position);
}

    @Override
    public void onBindViewHolder(final MyMainViewHolder holder, final int position) {
        holder.imageView.setImageResource(mainInfo.get(position).getICON_ID());
        holder.titleTextView.setText(mainInfo.get(position).getTITLE());
        holder.notesTextView.setText(mainInfo.get(position).getNOTES());
        holder.dateTextView.setText(mainInfo.get(position).getDATE());
        holder.timeTextView.setText(mainInfo.get(position).getTIME());

          holder.titleTextView.setOnClickListener(new    View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                    Toast.makeText(context,""+position,Toast.LENGTH_SHORT).show();

        }
        });

}




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

      

0


source


Note that in the viewport, the clickable is true

   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_weight="1"
    android:gravity="center_vertical|center|center_horizontal"
    android:layout_height="wrap_content">
        <android.support.v7.widget.CardView
            android:id="@+id/card_view"
            android:layout_width="match_parent"
            card_view:contentPadding="10dp"
            android:layout_height="200dp"
            android:layout_gravity="center"
            android:clickable="true"
            android:transitionGroup="false"
            android:layout_margin="10dp">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/select_photo"
                android:layout_alignParentTop="true"
                android:layout_gravity="center_horizontal"
                android:layout_margin="5dp"
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/select_name"
                android:textSize="25sp"
                android:textStyle="bold"
                android:layout_gravity="bottom|center_horizontal" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:id="@+id/txt_zoom_in"
            />`enter code here`

    </android.support.v7.widget.CardView>
</LinearLayout>

      

-1


source







All Articles