【发布时间】:2020-12-20 00:42:06
【问题描述】:
我在一个片段中有三个回收器视图(它本身托管/放置在另一个片段上),第二个和第三个片段的 onClick 不起作用(第一个工作得很好),我尝试了一切......在这里是我的代码:
第二个 Recycler View 适配器类: 最近的歌曲适配器.java
package com.myapp.beatify;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import java.util.List;
public class RecentSongsAdapter extends RecyclerView.Adapter<RecentSongsAdapter.MyViewHolder> {
private List<CreateSong> mRecentSongList;
private OnItemClickListener mListener;
public interface OnItemClickListener {
void onItemClick(int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
mListener = listener;
}
public RecentSongsAdapter(List<CreateSong> mRecentSongList) {
this.mRecentSongList = mRecentSongList;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.create_recent_songs, parent, false);
MyViewHolder myViewHolder = new MyViewHolder(view, mListener);
return myViewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
Glide.with(holder.imageView.getContext()).load(mRecentSongList.get(position).getImgURL()).into(holder.imageView);
holder.textView.setText(mRecentSongList.get(position).getTxt());
}
@Override
public int getItemCount() {
return mRecentSongList.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
public ImageView imageView;
public TextView textView;
public MyViewHolder(@NonNull View itemView, final OnItemClickListener listener) {
super(itemView);
this.imageView = itemView.findViewById(R.id.recent_img);
this.textView = itemView.findViewById(R.id.recent_txt);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (listener != null) {
int position = getAdapterPosition();
if (position == RecyclerView.NO_POSITION) {
listener.onItemClick(position);
}
}
}
});
}
}
}
它的 xml 文件: create_recent_songs.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/create_recent_RV"
android:layout_width="200dp"
android:layout_height="190dp"
android:layout_margin="5dp"
app:cardCornerRadius="5dp"
app:cardElevation="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="5dp">
<ImageView
android:id="@+id/recent_img"
android:layout_width="match_parent"
android:layout_height="160dp"
android:src="@drawable/app_logo" />
<TextView
android:id="@+id/recent_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/artifika"
android:gravity="center"
android:text="Shape Of You"
android:textSize="15sp"
android:textStyle="bold" />
</LinearLayout>
</androidx.cardview.widget.CardView>
第三个 Recycler View 适配器类: OurPicksAdapter.java
package com.myapp.beatify;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import java.util.List;
public class OurPicksAdapter extends RecyclerView.Adapter<OurPicksAdapter.MyViewHolder> {
private List<CreateSong> mOurPicksList;
private OnItemClickListener mListener;
public interface OnItemClickListener {
void onItemClick(int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
mListener = listener;
}
public OurPicksAdapter(List<CreateSong> mSongList) {
this.mOurPicksList = mSongList;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.create_our_picks, parent, false);
MyViewHolder myViewHolder = new MyViewHolder(view, mListener);
return myViewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
// holder.imageView.setImageResource(mSongList.get(position).getImgURL());
Glide.with(holder.imageView.getContext()).load(mOurPicksList.get(position).getImgURL()).into(holder.imageView);
holder.textView.setText(mOurPicksList.get(position).getTxt());
}
@Override
public int getItemCount() {
return mOurPicksList.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
public ImageView imageView;
public TextView textView;
public MyViewHolder(@NonNull View itemView, final OnItemClickListener listener) {
super(itemView);
this.imageView = itemView.findViewById(R.id.our_img);
this.textView = itemView.findViewById(R.id.our_txt);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (listener != null) {
int position = getAdapterPosition();
if (position == RecyclerView.NO_POSITION) {
listener.onItemClick(position);
}
}
}
});
}
}
}
它的 xml 文件: create_our_picks.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/create_our_RV"
android:layout_width="200dp"
android:layout_height="190dp"
android:layout_margin="5dp"
app:cardCornerRadius="5dp"
app:cardElevation="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="5dp">
<ImageView
android:id="@+id/our_img"
android:layout_width="match_parent"
android:layout_height="160dp"
android:src="@drawable/app_logo" />
<TextView
android:id="@+id/our_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/artifika"
android:gravity="center"
android:text="Shape Of You"
android:textSize="15sp"
android:textStyle="bold" />
</LinearLayout>
</androidx.cardview.widget.CardView>
【问题讨论】:
-
你能在你实例化适配器的地方添加代码吗?你用断点调试了吗?
-
实际上我无法添加代码,因为它不适合这里,好吧,如果我发送一个 github 链接,你会看一下代码吗?另外告诉我应该在哪里添加断点和调试
-
@KevinRobatel 你想让我把实例化适配器的代码发送给我吗?我的意思是在 pastebin 或一些代码共享站点中?
-
codepile.net/pile/rG8PR0GW,这是我实例化我的适配器@KevinRobatel的代码,(忽略我用来加载图像的巨大网址)
标签: android android-layout android-fragments android-recyclerview onclicklistener