To which element of the Recycler does the component that activates the event belong?

0

Good, I have the following code where a RecyclerView and events are implemented to the buttons of the card_view.xml that make up each element of the list of the Recycler, however, I would like to know how to know which card_view of the list belongs to the event , for example, click on a "Buy" button and identify the parent component to which it belongs (to differentiate the purchase).

Here the code:

public class ViewCoursesActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    RecyclerView.LayoutManager layoutManager;
    private CourseAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_courses);
        recyclerView = findViewById(R.id.recyclerViewCourses);
        recyclerView.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        ArrayList<Course> datos = new ArrayList<>();
        datos.add(new Course("Relational databases", 500,
                "A complete course about relational databases.", R.drawable.bbdd));
        datos.add(new Course("OOP", 500,
                "A complete course about objects oriented programming.", R.drawable.objetos));
        datos.add(new Course("Android", 0,
                "A complete course about Android.", R.drawable.android));

        adapter = new CourseAdapter(datos, R.layout.card_course,
                this, new CourseAdapter.OnItemClickListener() {

            @Override
            public void onItemClickListener(View view) {
                    switch (view.getId()){
                        case R.id.buttonBuy:{
                            Toast.makeText(getApplicationContext(), "Funciona", Toast.LENGTH_SHORT).show();
                             break;
                        }
                    }
                }
            });
        recyclerView.setAdapter(adapter);
    }
}

And the adapter like that, where I implemented the OnItemClickListener in the ViewHolder, etc.

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

    ArrayList<Course> dataSet;
    private int layout;
    private Activity activity;
    private static OnItemClickListener listener;

    public CourseAdapter(ArrayList<Course> dataSet, int layout, Activity activity, OnItemClickListener listener) {
        this.dataSet = dataSet;
        this.layout = layout;
        this.activity = activity;
        this.listener = listener;
    }

    @Override
    public CourseAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(layout, parent, false);

        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(CourseAdapter.ViewHolder holder, int position) {
        holder.title.setText(dataSet.get(position).getName());
        if(dataSet.get(position).getCost() == 0){
            holder.cost.setText("FREE");
        }else{
            holder.cost.setText("$"+dataSet.get(position).getCost());
        }
        holder.description.setText(dataSet.get(position).getDescription());
        holder.image.setImageResource(dataSet.get(position).getCover());
        //events
    }

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


    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        TextView title;
        TextView description;
        TextView cost;
        ImageView image;
        Button buttonBuy, buttonSeeMore;
        Context context;
        public ViewHolder(View itemView) {
            super(itemView);
            context = itemView.getContext();
            title = itemView.findViewById(R.id.textViewTitle);
            description = itemView.findViewById(R.id.textViewDescription);
            cost = itemView.findViewById(R.id.textViewCost);
            image = itemView.findViewById(R.id.imageViewCover);
            buttonBuy = itemView.findViewById(R.id.buttonBuy);
            buttonSeeMore = itemView.findViewById(R.id.buttonSeeMore);
            buttonBuy.setOnClickListener(this);
            buttonSeeMore.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {
            // Llamas el método onItemClickListener() de la interfaz OnItemClickListener
            listener.onItemClickListener(view);
        }
    }
    public interface OnItemClickListener{
        // Este método recibe como parámetro la vista del elemento seleccionado
        void onItemClickListener(View view);
    }
}
    
asked by Parzival 20.11.2017 в 18:05
source

1 answer

1

Modify your OnItemClickListener interface:

void onItemClickListener(View view, int position);

And modify your onClick method:

    @Override
            public void onClick(View view) {
                // Llamas el método onItemClickListener() de la interfaz OnItemClickListener
                listener.onItemClickListener(view, getLayoutPosition());
            }

Then:

 @Override
            public void onItemClickListener(View view, int position) {
                    Course course = datos.get(position);
                    //aquí lo tienes
                }
            });
    
answered by 20.11.2017 / 18:08
source