问题描述
我在一个片段中有三个回收站视图(它本身位于/放置在另一个片段中),第二个和第三个片段的onClick无法正常工作(第一个很好用),我尝试了所有操作...在这里是我的代码:
第二个Recycler View适配器类: LatestSongsAdapter.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,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>
解决方法
我看一下https://www.codepile.net/pile/rG8PR0GW,也许您应该将oAdapter.setOnItemClickListener
调用移到ourRecyclerView.setAdapter
之前。
赞:
private void createUserRecentRecyclerView() {
recentRecyclerView = view.findViewById(R.id.user_recent_RV);
recentRecyclerView.setHasFixedSize(true);
rAdapter = new RecentSongsAdapter(recentList);
rAdapter.setOnItemClickListener(
new RecentSongsAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
Log.e("Info","Connected");
Toast.makeText(getActivity(),"" + position,Toast.LENGTH_SHORT).show();
}
});
recentRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(),LinearLayoutManager.HORIZONTAL,false));
recentRecyclerView.setAdapter(rAdapter);
}