我有一個電影的recyclerview,我需要電影名稱來使用intent putextra。我已經制作了點擊監聽器并獲得了配接器位置,但它只回傳圖片中的配接器陣列。
logcat 中的輸出圖片
我怎樣才能得到字串,所以我可以使用意圖 putextra?
這是我的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);
}}
我已經嘗試了一切,但它仍然回傳陣列值而不是電影名稱的字串值
uj5u.com熱心網友回復:
您已經做出了很大的努力??,但是您在這里做的很少。讓我一步一步地向你解釋所有事情。
- 您需要來自點擊偵聽器的字串值,但您在點擊中傳遞了一個視圖 位置。所以要解決這個問題,你首先需要像這樣改變你的界面。
public interface onMovieClickListener{
void onMovieClick(movie movie, int position);
}
- 第二個錯誤是您的 ViewHolder 中沒有您的電影。這就是為什么你不能在你的監聽器中傳遞字串。要解決此問題,您需要更改 myViewHolder,如下所示。
public static class myViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
private final TextView judul, tahun;
private final ImageView image;
RelativeLayout parent;
movie movie;
onMovieClickListener onMovieClickListener;
public myViewHolder(@NonNull View itemView) {
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);
itemView.setOnClickListener(this);
}
public void bind(movie movie, onMovieClickListener onMovieClickListener)
{
this.movie = movie;
this.onMovieClickListener = onMovieClickListener;
}
@Override
public void onClick(View view) {
onMovieClickListener.onMovieClick(movie, this.getLayoutPosition());
}
}
- 像這樣更改您的配接器功能。
@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);
}
@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);
holder.bind(movies.get(position), this.movieClickListener);
}
而已!!!
現在你的聽眾中有你的電影,你可以使用你的電影來獲取電影中的任何變數,比如電影名稱等。
我在這里粘貼整個 java 檔案,以便您可以復制和粘貼代碼進行測驗。
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);
}
@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);
holder.bind(movies.get(position), this.movieClickListener);
}
@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;
movie movie;
onMovieClickListener onMovieClickListener;
public myViewHolder(@NonNull View itemView) {
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);
itemView.setOnClickListener(this);
}
public void bind(movie movie, onMovieClickListener onMovieClickListener)
{
this.movie = movie;
this.onMovieClickListener = onMovieClickListener;
}
@Override
public void onClick(View view) {
onMovieClickListener.onMovieClick(movie, this.getLayoutPosition());
}
}
public interface onMovieClickListener{
void onMovieClick(movie movie, int position);
}}
**
幾點建議:
- 不要通過您的聽眾將 View 發送到您的活動/片段
- 您的變數的駱駝案例。
- 以大寫字母開頭的類名。
** 這幾個建議將使您的代碼更具可讀性。
快樂編碼??!!
uj5u.com熱心網友回復:
將介面偵聽器更改為:
public interface onMovieClickListener {
void onMovieClick(View v, Movie movie);
}
然后將您的 setOnClickListener 定義為:
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onMovieClickListener.onMovieClick(v, movies.get(getAdapterPosition()));
}
}
});
您將能夠根據需要獲取選定的電影和顯示名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/491103.html
標籤:爪哇 安卓 安卓工作室 android-recyclerview
上一篇:org.apache.kafka.streams.errors.StreamsException:序列化程式(鍵:BytesSerializer/值:BytesSerializer)與實際鍵不兼容
下一篇:獲取Javax驗證注解屬性值
