You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从RecyclerView获取电影名称字符串用于Intent putExtra传参

问题描述

我实现了用于展示电影列表的RecyclerView,需要获取电影名称字段通过Intent的putExtra方法完成参数传递。目前我已经编写了点击监听器,能够正常获取适配器点击位置,但仅能返回适配器对应的数组对象,logcat输出仅能打印数组对象信息,无法直接拿到电影名称字段。
尝试了多种实现方式,始终只能返回数组对象值,无法获取到电影名称对应的字符串值用于Intent传参。
现有RecyclerView适配器代码如下:

public class movieRecyclerViewAdapter extends RecyclerView.Adapter<movieRecyclerViewAdapter.myViewHolder> {

private static final String TAG = "movieRecyclerViewAdapter";
private onMovieClickListener movieClickListener;
private final ArrayList<movie> movies;

public movieRecyclerViewAdapter(ArrayList<movie> movieArrayList, onMovieClickListener onMovieClickListener){
    this.movies = movieArrayList;
    this.movieClickListener = onMovieClickListener;
    Log.d("mainMenuAdmin", "Adapter List size : " + movieArrayList.size() );
}

@NonNull
@Override
public movieRecyclerViewAdapter.myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_movie, parent, false);
    return new myViewHolder(view, movieClickListener);
}

@Override
public void onBindViewHolder(@NonNull movieRecyclerViewAdapter.myViewHolder holder, int position) {
    Log.d(TAG, "onBindViewHolder: called");
    String img = movies.get(position).getMovie_image();
    holder.judul.setText(movies.get(position).getNamaMovie());
    holder.tahun.setText(movies.get(position).getTahunMovie());
    Picasso.get().load(img).error(R.mipmap.ic_launcher).placeholder(R.mipmap.ic_launcher_round).into(holder.image);

}

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

public static class myViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    private final TextView judul, tahun;
    private final ImageView image;
    RelativeLayout parent;
    onMovieClickListener onMovieClickListener;

    public myViewHolder(@NonNull View itemView, onMovieClickListener onMovieClickListener) {
        super(itemView);
        judul = itemView.findViewById(R.id.txtJudul);
        tahun = itemView.findViewById(R.id.txtTahun);
        image = itemView.findViewById(R.id.imagePoster);
        parent = itemView.findViewById(R.id.parent_layout);
        this.onMovieClickListener = onMovieClickListener;

        itemView.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        onMovieClickListener.onMovieClick(view, this.getLayoutPosition());
    }
}

public interface onMovieClickListener{
    void onMovieClick(View v, int position);

}}
解决方法

你已经拿到了点击条目的position参数,直接用该位置从绑定的电影数据源中取出对应对象,调用对象的getNamaMovie()方法就能拿到电影名称字符串,不需要额外修改视图绑定逻辑。

  • 方法一:直接在点击回调中通过position取值(无需修改现有适配器代码)
    在实现onMovieClickListener接口的Activity/Fragment中,重写onMovieClick方法时,用传入的position从你传给适配器的电影列表中取对应对象即可:
@Override
public void onMovieClick(View v, int position) {
    // 取出点击位置对应的电影实体对象,movieList为你传入适配器的ArrayList<movie>数据源
    movie clickedMovie = movieList.get(position);
    // 调用getter方法获取电影名称字符串
    String movieName = clickedMovie.getNamaMovie();
    // 放入Intent完成传参
    Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
    intent.putExtra("MOVIE_NAME", movieName);
    startActivity(intent);
}

注意:该方法需要你在Activity/Fragment中持有传给适配器的电影列表引用,不要在传参后把列表引用置空。

  • 方法二:修改适配器点击接口,直接回传电影对象(无需在页面持有数据源引用)
    只需要修改两处代码,回调中可以直接拿到点击的电影对象,不用手动处理位置对应关系:
  1. 修改点击接口定义,将参数从位置改为电影实体对象:
public interface onMovieClickListener{
    void onMovieClick(View v, movie clickedMovie);
}
  1. 修改ViewHolder的点击事件逻辑,取出对应位置的电影对象传给接口:
@Override
public void onClick(View view) {
    int clickPos = getLayoutPosition();
    // 判空避免位置越界
    if (clickPos != RecyclerView.NO_POSITION) {
        onMovieClickListener.onMovieClick(view, movies.get(clickPos));
    }
}

修改完成后,在页面的点击回调中可以直接拿到电影对象,调用getNamaMovie()就能获取名称字符串用于传参。

内容的提问来源于stack exchange,提问作者Federico Alie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:42:17