0

how i am want to add function setOnClickListener to my code and Push information that continues to the clicked record to another activity. I don't know how to do that . i happy to accept help . thank's.

I have attached the two pieces of code I am working with: This is my class recycle_recipe.java:

package com.lee.app1_new;
import android.content.Context;
import android.media.Image;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.firebase.ui.database.FirebaseRecyclerAdapter;


import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.squareup.picasso.Picasso;

public class recycle_recipe extends AppCompatActivity {

    private RecyclerView mRlist;
    private DatabaseReference mDatabase;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recycle_recipe);

        mDatabase = FirebaseDatabase.getInstance().getReference().child("cake");
        mDatabase.keepSynced(true);
        mRlist = findViewById(R.id.recycle);
        // mRlist.setHasFixedSize(true);
        mRlist.setLayoutManager(new LinearLayoutManager(this));


    }

    @Override
    protected void onStart() {
        super.onStart();


        FirebaseRecyclerAdapter < adCake, adCakeViewHolder > firebaseRecyclerAdapter = new FirebaseRecyclerAdapter < adCake, adCakeViewHolder >
                (adCake.class, R.layout.recip_card, adCakeViewHolder.class, mDatabase) {
            @Override
            protected void populateViewHolder(adCakeViewHolder viewHolder, adCake model, int position) {
                viewHolder.setName(model.getName());
                viewHolder.setIng(model.getIngredients());
                viewHolder.setPrep(model.getPreparation());
                viewHolder.setImg(getApplicationContext(), model.getImage());

            }

        };

        mRlist.setAdapter(firebaseRecyclerAdapter);
    }

    public static class adCakeViewHolder extends RecyclerView.ViewHolder {
        View mView;

        public adCakeViewHolder(@NonNull View itemView) {
            super(itemView);
            mView = itemView;
        }
        public void setName(String name) {
            TextView post_name = (TextView) mView.findViewById(R.id.name);
            post_name.setText(name);
        }
        public void setIng(String ing) {
            TextView post_ing = (TextView) mView.findViewById(R.id.ingredients);
            post_ing.setText(ing);
        }
        public void setPrep(String prep) {
            TextView post_prep = (TextView) mView.findViewById(R.id.preparation);
            post_prep.setText(prep);
        }
        public void setImg(Context ctx, String img) {
            ImageView post_img = (ImageView) mView.findViewById(R.id.image);
            Picasso.with(ctx).load(img).into(post_img);
        }
    }
}

And this is my class adCake.java(here i set the variables):

package com.lee.app1_new;
public class adCake {

    private String image;
    private String name;
    private String ingredients;
    private String preparation;


    public adCake(String image, String name, String ingredients, String preparation) {
        this.image = image;
        this.name = name;
        this.ingredients = ingredients;
        this.preparation = preparation;
    }

    public void setImage(String image) {
        this.image = image;
    }
    public String getImage() {
        return image;
    }

    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }


    public void setIngredients(String ingredients) {
        this.ingredients = ingredients;
    }

    public void setPreparation(String preparation) {
        this.preparation = preparation;
    }

    public String getIngredients() {
        return ingredients;
    }

    public String getPreparation() {
        return preparation;
    }
    public adCake() {
        super();
    }
}`    
lee_ah12
  • 1
  • 3

1 Answers1

0

simply add Parcelable Offical Implementation of Parcelable to your Model(Pojo) class. then try to get view from your adCakeViewHolder class and add click listener to it.

public class adCake implements Parcelable {

}


  public static class adCakeViewHolder extends RecyclerView.ViewHolder {
      View mView; //this view will help you to implement click listener 

      public adCakeViewHolder(@NonNull View itemView) {
       super(itemView);
       mView = itemView;
      }


     public View getItemView() {
       return mView;
      }

    }




 FirebaseRecyclerAdapter < adCake, adCakeViewHolder > firebaseRecyclerAdapter = new FirebaseRecyclerAdapter < adCake, adCakeViewHolder >
       (adCake.class, R.layout.recip_card, adCakeViewHolder.class, mDatabase) {
        @Override
        protected void populateViewHolder(adCakeViewHolder viewHolder, adCake model, int position) {
         viewHolder.getItemView().setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                 Intent i = new Intent(context, NextActivity.class);
                 i.putExtra("adCake", model);
                 startActivity(i);                      
                }
            });

 viewHolder.getItemView().addOnItemTouchListener(new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() {
        @Override
        public void onItemClick(View view, int position) {

             Intent i = new Intent(context, NextActivity.class);
                 i.putExtra("adCake", model);
                 startActivity(i); 
        }
    }));

 viewHolder.setOnClickListener(new FirebaseViewHolder.ClickListener() {
                    @Override
                    public void onItemClick(View view, int position) {
                        Toast.makeText(getActivity(), "Item clicked at " + position, Toast.LENGTH_SHORT).show();
                    }


                });


            }

           };

OR Create Interface to send callbacks...

 private FirebaseViewHolder.ClickListener mClickListener;
public void setOnClickListener(FirebaseViewHolder.ClickListener clickListener) 
    {
        mClickListener = clickListener;
    }


public interface ClickListener{
    public void onItemClick(View view);

}
Atif AbbAsi
  • 5,633
  • 7
  • 26
  • 47
  • Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackoverflow.com/rooms/201968/discussion-on-answer-by-atif-abbasi-view-photo-from-firebase-in-recycleview). – Samuel Liew Nov 06 '19 at 20:37