单击卡时无法打开新活动

mcvgt66p  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(276)

我试着制作一个菜谱应用程序,通过api获取数据来显示菜谱,我在相对布局中显示了卡片,并在新活动中显示了菜谱的详细信息,但单击卡片后我无法打开新活动
recipeadapter.java文件

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;

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

import com.example.recipeappandroid.Model.Recipe;
import com.example.recipeappandroid.R;
import com.example.recipeappandroid.Viewholder.recipeViewHolder;
import com.squareup.picasso.Picasso;

import java.util.ArrayList;

public class RecipeAdapter extends RecyclerView.Adapter<recipeViewHolder>{
   private Context mContext;
   private ArrayList<Recipe> mRecipe;
   public static OnItemClickListener mListener;

   public interface OnItemClickListener{
       void onItemClick(int position);
   }

   public void setOnItemClickListener(OnItemClickListener listener)
   {
       mListener = listener;
   }

   public RecipeAdapter(Context context,ArrayList<Recipe> recipe) {
       mContext = context;
       mRecipe = recipe;
   }

   /*public void setData(ArrayList<Recipe> mRecipe) {
       this.mRecipe = mRecipe;
   }*/

   @NonNull
   @Override
   public recipeViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
       View view = LayoutInflater.from(mContext).inflate(R.layout.recycler_row, viewGroup, false);
       return new recipeViewHolder(view);
   }

   @Override
   public void onBindViewHolder(@NonNull recipeViewHolder viewHolder, int i) {
       Recipe recipe = mRecipe.get(i);
       Picasso.get().load(recipe.getImg()).into(viewHolder.image);
       viewHolder.recipe_title.setText(recipe.getTitle());
       viewHolder.recipe_data.setText(recipe.getData());
   }

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

   }

配方.java

package com.example.recipeappandroid.Model;

public class Recipe {
    private String img;
    private String title;
    private String data;

    public Recipe(String imgurl, String img_title, String img_data) {
        img = imgurl;
        title = img_title;
        data = img_data;
    }

    public String getImg() {
        return img;
    }

    public void setImg(String img) {
        this.img = img;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}

我想打开的新活动
recipeacitivity.java文件

package com.example.recipeappandroid;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import static com.example.recipeappandroid.Fragments.SearchFragment.EXTRA_DATA;
import static com.example.recipeappandroid.Fragments.SearchFragment.EXTRA_TITLE;
import static com.example.recipeappandroid.Fragments.SearchFragment.EXTRA_URL;

public class RecipeActivity extends AppCompatActivity {

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

        Intent intent = getIntent();
        String imageUrl = intent.getStringExtra(EXTRA_URL);
        String recipeTitle = intent.getStringExtra(EXTRA_TITLE);
        String recipeData = intent.getStringExtra(EXTRA_DATA);

        ImageView imageView = findViewById(R.id.image_view_detail);
        TextView RecipeTitle = findViewById(R.id.recipe_name_detail);
        TextView RecipeData = findViewById(R.id.recipe_data_detail);

        Picasso.get().load(imageUrl).fit().centerCrop().into(imageView);
        RecipeTitle.setText(recipeTitle);
        RecipeData.setText(recipeData);

    }
}

有人能帮我吗

46scxncf

46scxncf1#

@Override
   public void onBindViewHolder(@NonNull recipeViewHolder viewHolder, int i) {
       Recipe recipe = mRecipe.get(i);
       Picasso.get().load(recipe.getImg()).into(viewHolder.image);
       viewHolder.recipe_title.setText(recipe.getTitle());
       viewHolder.recipe_data.setText(recipe.getData());
       viewHolder.yourCardView.setOnClickListener(new View.OnclickListener(){
                 public void onClick(View view){
                      if(mListener!=null){
                      mListener.onItemClick(viewHolder.getAdapterPosition())
                      }
                 }
   }

在你的活动中 RecipeAdapter :

recipeAdapter.setOnItemClickListener(new OnItemClickListener(){..})
kcugc4gi

kcugc4gi2#

添加单击可循环查看适配器viewholder位置

@Override
   public void onBindViewHolder(@NonNull recipeViewHolder viewHolder, int i) {
       Recipe recipe = mRecipe.get(i);
       Picasso.get().load(recipe.getImg()).into(viewHolder.image);
       viewHolder.recipe_title.setText(recipe.getTitle());
       viewHolder.recipe_data.setText(recipe.getData());
        viewHolder.itemView.setOnClickListener { 
            mListener.onItemClick(i)
        }
   }

并从活动初始化setonitemclicklistener

相关问题