Простая реализация прослушивателя RecyclerView - PullRequest
0 голосов
/ 19 июня 2020

Я хочу, чтобы приложение открывало страницу, когда пользователь нажимает на элемент, и передавало дополнительную информацию этому намерению. Вот и все. Я пробовал около 7-10 типов onclickListener, но ничего не решил. Я публикую свой класс адаптера с последней реализацией (это не работает). Json работает, и Recyclerview загружает данные и изображения с URL без проблем.

package byDragosT.myapplication;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView;

import com.squareup.picasso.Picasso;

import java.util.ArrayList;

public class RecipeApiAdapter extends RecyclerView.Adapter<RecipeApiAdapter.RecipeViewHolder> {
    private ArrayList<RecipeItem> recipeItems;
    private Context context;

    public RecipeApiAdapter(ArrayList<RecipeItem> recipeItems, Context context){
        this.recipeItems = recipeItems;
        this.context = context;
    }

    @NonNull
    @Override    //// Mare grija ce layout pui aici - sfat pentru viitor - mi-a luat 4 ore sa gasesc eroarea
    public RecipeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recipe_item_in_recyclerview_api, parent, false);
        return new RecipeViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecipeViewHolder holder, int position) {
        final RecipeItem recipeItem = recipeItems.get(position);
        holder.title.setText(recipeItem.getMnameRecipe());
        holder.description.setText(recipeItem.getMdescribeRecipe());

        Picasso.get().load(recipeItem.getItemPictureUrl())
                .into(holder.jpegRecipe);
        System.out.println("image with title: " + holder.title.getText() + "was added in theory");
    }

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

    public static class RecipeViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public ImageView jpegRecipe;
        public TextView title;
        public TextView description;
        public RelativeLayout containerView;
        public RecyclerView mRecyclerView;

    RecipeViewHolder(View view){
            super(view);
            jpegRecipe = view.findViewById(R.id.picture);
            title = view.findViewById(R.id.recipe_name);
            description = view.findViewById(R.id.ingredients_list);
            containerView = view.findViewById(R.id.recipe_item_container); // vezi aici
            mRecyclerView = view.findViewById(R.id.recyclerView);
    }

        @Override
        public void onClick(View v) {
            int itemPosition = mRecyclerView.getChildLayoutPosition(v);
            RecipeItem current = recipeItems.get(itemPosition);
            Intent intent = new Intent(v.getContext(), RecipeDetailsActivity.class);
            intent.putExtra("name", current.getMnameRecipe());
            v.getContext().startActivity(intent);
        }
    }
}

1 Ответ

0 голосов
/ 20 июня 2020

Попробуйте добавить view.setOnClickListener (this);
RecipeViewHolder(View view){ super(view); view.setOnClickListener(this); ..... }

...