片段中的OnClick for 2/3回收者视图本身托管/放置在另一个片段中不起作用

问题描述

我在一个片段中有三个回收站视图(它本身位于/放置在另一个片段中),第二个和第三个片段的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);
    }