英文:
how to make all items in an adapter clickable?
问题
我根据您提供的内容进行翻译如下:
我按照教程制作了一个应用程序。教程的创建者制作了一个包含可以去的地方照片的“最近”行。
代码被设计成每次单击照片时都显示相同的“详细信息活动”。
问题是:我已经为最近行中的每张照片制作了4个不同的活动,并且我想将每张照片链接到其相应的活动。
public class RecentsAdapter extends RecyclerView.Adapter<RecentsAdapter.RecentsViewHolder> {
    Context context;
    List<RecentsData> recentsDataList;
    // RecentsAdapter的代码:
    public RecentsAdapter(Context context, List<RecentsData> recentsDataList) {
        this.context = context;
        this.recentsDataList = recentsDataList;
    }
    @NonNull
    @Override
    public RecentsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.recents_row_item, parent ,false);
        return new RecentsViewHolder(view);
    }
    @Override
    public void onBindViewHolder(@NonNull RecentsViewHolder holder, int position) {
        holder.countryName.setText(recentsDataList.get(position).getCountryName());
        holder.placeName.setText(recentsDataList.get(position).getPlaceName());
        holder.price.setText(recentsDataList.get(position).getPrice());
        holder.placeImage.setImageResource(recentsDataList.get(position).getImageUrl());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i=new Intent(context, DetailsActivity.class);
                context.startActivity(i);
            }
        });
    }
    @Override
    public int getItemCount() {
        return recentsDataList.size();
    }
    public static final class RecentsViewHolder extends RecyclerView.ViewHolder {
        ImageView placeImage;
        TextView placeName,countryName,price;
        public RecentsViewHolder(@NonNull View itemView) {
            super(itemView);
            placeImage = itemView.findViewById(R.id.place_image);
            placeName = itemView.findViewById(R.id.place_name);
            countryName = itemView.findViewById(R.id.country_name);
            price = itemView.findViewById(R.id.price);
        }
    }
}
希望这能帮助到您。如果您有其他问题或需要进一步的帮助,请随时提问。
英文:
I made an app following a tutorial. The creator of the tutorial made a "Recents" row which contains photos of the places you can go to.
The code was made to show the same "details activity" every time you click on a photo.
The problem: I already made 4 different Activities to each photo in the recents row and I want to link each photo to its Activity.
the DetailsActivity that keeps on showing
Recents-row
public class RecentsAdapter extends RecyclerView.Adapter<RecentsAdapter.RecentsViewHolder> {
    Context context;
    List<RecentsData> recentsDataList;
    //the RecentsAdapter code:
    public RecentsAdapter(Context context, List<RecentsData> recentsDataList) {
        this.context = context;
        this.recentsDataList = recentsDataList;
    }
    @NonNull
    @Override
    public RecentsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.recents_row_item, parent ,false);
        return new RecentsViewHolder(view);
    }
    @Override
    public void onBindViewHolder(@NonNull RecentsViewHolder holder, int position) {
        holder.countryName.setText(recentsDataList.get(position).getCountryName());
        holder.placeName.setText(recentsDataList.get(position).getPlaceName());
        holder.price.setText(recentsDataList.get(position).getPrice());
        holder.placeImage.setImageResource(recentsDataList.get(position).getImageUrl());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i=new Intent(context, DetailsActivity.class);
                context.startActivity(i);
            }
        });
    }
    @Override
    public int getItemCount() {
        return recentsDataList.size();
    }
    public static final class RecentsViewHolder extends RecyclerView.ViewHolder {
        ImageView placeImage;
        TextView placeName,countryName,price;
        public RecentsViewHolder(@NonNull View itemView) {
            super(itemView);
            placeImage = itemView.findViewById(R.id.place_image);
            placeName = itemView.findViewById(R.id.place_name);
            countryName = itemView.findViewById(R.id.country_name);
            price = itemView.findViewById(R.id.price);
        }
    }
}
答案1
得分: 1
Pass extra arguments in your click listener:
@Override
public void onBindViewHolder(@NonNull RecentsViewHolder holder, int position) {
    DataItem item = recentsDataList.get(position); // 简洁的代码
    holder.countryName.setText(item.getCountryName());
    holder.placeName.setText(item.getPlaceName());
    holder.price.setText(item.getPrice());
    holder.placeImage.setImageResource(item.getImageUrl());
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(context, DetailsActivity.class);
            
            // 在这里添加更多的参数
            i.putExtra("place_name", item.getPlaceName());
            context.startActivity(i);
        }
    });
}
And in your DetailsActivity.onCreate():
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    // 获取地点名称并相应加载布局
    String placeName = getIntent().getStringExtra("place_name");
}
英文:
Pass extra arguments in your click listener:
@Override
public void onBindViewHolder(@NonNull RecentsViewHolder holder, int position) {
    DataItem item = recentsDataList.get(position); //Cleaner code
    holder.countryName.setText(item.getCountryName());
    holder.placeName.setText(item.getPlaceName());
    holder.price.setText(item.getPrice());
    holder.placeImage.setImageResource(item.getImageUrl());
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(context, DetailsActivity.class);
            
            //You can add more arguments here
            i.putExtra("place_name", item.getPlaceName());
            context.startActivity(i);
        }
    });
}
And in your DetailsActivity.onCreate():
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    //Get the place name and load the layout accordingly
    String placeName = getIntent().getStringExtra("place_name");
}
答案2
得分: 0
如果您想使用意图传递消息,可以使用 intent.putExtra()
如果您想传递一个捆绑包,可以使用 intent.putExtras()
英文:
If you want to use an intent to convey a message. You can use intent.putExtra()
If you want to pass a bundle, you can use intent.putExtras()
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论