【问题标题】:Unable to open new activity on clicking card无法在点击卡片时打开新活动
【发布时间】:2020-12-13 17:50:19
【问题描述】:

我尝试制作一个食谱应用程序,通过 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();
   }


   }

Recipe.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);

    }
}

有人可以帮我解决这个问题

【问题讨论】:

    标签: java android api android-layout android-recyclerview


    【解决方案1】:

    添加点击到 RecyclerView 适配器 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)
            }
       }
    

    并从Activity初始化setOnItemClickListener

    【讨论】:

      【解决方案2】:
      @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(){..})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-08
        • 1970-01-01
        • 1970-01-01
        • 2020-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多