【问题标题】:A simple implementation of a RecyclerView ListenerRecyclerView 监听器的简单实现
【发布时间】:2020-10-10 03:07:45
【问题描述】:

我希望应用在用户点击某个项目时打开一个页面并将一些额外信息传递给该意图。而已。我尝试了大约 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);
        }
    }
}

【问题讨论】:

    标签: java android-studio android-recyclerview onclicklistener


    【解决方案1】:

    尝试添加 view.setOnClickListener(this);
    RecipeViewHolder(View view){ super(view); view.setOnClickListener(this); ..... }

    【讨论】:

    • 我使用了指定的实现,现在可以点击recyclerview了。我在“RecipeItem current = (RecipeItem) mRecyclerView.getTag();”行的 onClick 中有另一个问题- 我得到了可怕的空对象引用:尝试在空对象引用上调用虚拟方法“java.lang.Object androidx.recyclerview.widget.RecyclerView.getTag()”。 recyclerview 显示照片和文字,所以它不为空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    相关资源
    最近更新 更多