Android youtubeplayer的RecyclerView上的OnClickItem出现异常

Android youtubeplayer的RecyclerView上的OnClickItem出现异常,android,android-recyclerview,onclick,onclicklistener,Android,Android Recyclerview,Onclick,Onclicklistener,我的片段显示了一个youtube播放器和回收器视图,其中包含来自JSON数据的视频列表。现在我正在尝试应用onclick,但它不起作用。我尝试了OnClickListener,但当点击视频时,应用程序崩溃。片段代码如下所示: public class Fragment2 extends Fragment { private List<VideoYT> videoList = new ArrayList<>(); private LinearLayoutM

我的片段显示了一个youtube播放器和回收器视图,其中包含来自JSON数据的视频列表。现在我正在尝试应用onclick,但它不起作用。我尝试了OnClickListener,但当点击视频时,应用程序崩溃。片段代码如下所示:

public class Fragment2 extends Fragment {

    private List<VideoYT> videoList = new ArrayList<>();
    private LinearLayoutManager manager;
    private AdapterHome1 adapter;
    private String nextPageToken = "";
    YouTubePlayer.OnInitializedListener mOnInitializedListener;
    private YouTubePlayer youTubePlayer;
    private YouTubePlayerSupportFragmentX youTubePlayerFragment;
    private RecyclerView rv;
    YouTubePlayerView mYouTubePlayerView;

    public Fragment2() {
    }

    @Override
    public    View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_1, container, false);
        // Inflate the layout for this fragment
        //Youtube Fragment

        youTubePlayerFragment = YouTubePlayerSupportFragmentX.newInstance();
        //youTubePlayerFragment.initialize(Constants.DEVELOPER_KEY, new YouTubePlayer.OnInitializedListener() {
        mOnInitializedListener = new YouTubePlayer.OnInitializedListener() {

            @Override
            public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player,
                                                boolean wasRestored) {
                if (!wasRestored) {
                    youTubePlayer = player;

                    //set the player style default
                    youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);

                    //cue the 1st video by default
                    youTubePlayer.loadVideo(videoList.toString(),0);

                    youTubePlayer.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE);
                }
            }

            @Override
            public void onInitializationFailure(YouTubePlayer.Provider arg0, YouTubeInitializationResult arg1) {

                //print or show error if initialization failed
                Log.e(TAG, "Youtube Player View initialization failed");
            }
        };
        FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
        transaction.add(R.id.youtube_layout, youTubePlayerFragment).commit();
       

 //RecyclerView
        rv = view.findViewById(R.id.recyclerView);
 adapter = new AdapterHome1(getContext(),videoList,mOnInitializedListener,mYouTubePlayerView);

        manager = new LinearLayoutManager(getContext());
        rv.setAdapter(adapter);
        rv.setLayoutManager(manager);

           
        loadJSON();
      
        return view;
    }
    private
    void loadJSON() {
       ...
    }
}

几天来,我一直在用不同的方法处理这个问题,例如apply OnItemTouchListener,但它也不起作用。

这个错误说
MyoutDeplayerView
为空,这很有意义,因为我可以看到它没有在AdapterHome1类中的任何地方初始化。

您应该更改适配器类的构造函数以将其作为参数。

使用改进的代码编辑了问题,但错误相同。还发布了错误我看不到
mYouTubePlayerView
已初始化Fragment2类中的任何位置。。。在适配器构造中使用它之前必须对其进行初始化,否则无法理解youtubeplayerview的初始化。这一行不正确吗?`MonitorInitializedListener=new YouTubePlayer.OnInitializedListener(){`nope..问题出在
MyOutTubepLayerView
本身,我认为您缺少这一行
MyOutTubepLayerView=(YouTubePlayerView)findViewById(R.id.player)
或类似的内容,请检查此链接该引用用于活动。我正在片段中工作。为了完成以下操作,我实现了'FragmentTransaction=getChildFragmentManager().beginTransaction();transaction.add(R.id.youtube_layout,youTubePlayerFragment).commit()`
public class AdapterHome1 extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private Context context;
    private List<VideoYT> videoList;
    private int selectedPosition = 0;
   YouTubePlayer.OnInitializedListener mOnInitializedListener;
   YouTubePlayerView mYouTubePlayerView;


   public    AdapterHome1(Context context, List<VideoYT> videoList, YouTubePlayer.OnInitializedListener mOnInitializedListener, YouTubePlayerView mYouTubePlayerView) {
        this.context = context;
        this.videoList = videoList;
        this.mOnInitializedListener = mOnInitializedListener;
        this.mYouTubePlayerView = mYouTubePlayerView;
    }

    public
    void setSelectedPosition(int position) {
        this.selectedPosition = selectedPosition;
        //when item selected notify the adapter
        notifyDataSetChanged();
    }

    class YoutubeHolder extends RecyclerView.ViewHolder {

        ImageView thumbnail;
        TextView judul, tanggal;

        public YoutubeHolder(@NonNull View itemView) {
            super(itemView);
            thumbnail = itemView.findViewById(R.id.iv_thumbnail);
            judul = itemView.findViewById(R.id.tv_judul);
            tanggal = itemView.findViewById(R.id.tv_tglUpdate);
        }

        public void setData(final VideoYT data) {
            final String getJudul = data.getSnippet().getTitle();
            String getTgl = data.getSnippet().getPublishedAt();
            String getThumb = data.getSnippet().getThumbnails().getMedium().getUrl();

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {


                    mYouTubePlayerView.initialize(Constants.DEVELOPER_KEY, mOnInitializedListener);
                }
            });

            judul.setText(getJudul);
            tanggal.setText(ChangeTo.getTimeAgo(getTgl));
            Picasso.get()
                    .load(getThumb)
                    .placeholder(R.mipmap.ic_launcher)
                    .fit()
                    .centerCrop()
                    .into(thumbnail, new Callback() {
                        @Override
                        public void onSuccess() {
                            Log.d(TAG, "Thumbnail berhasil ditampilkan");
                        }

                        @Override
                        public void onError(Exception e) {
                            Log.e(TAG, "Thumbnail error: ", e);
                        }
                    });
        }
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.row_item_home, parent, false);
        return new YoutubeHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        VideoYT videoYT = videoList.get(position);
        YoutubeHolder yth = (YoutubeHolder) holder;
        yth.setData(videoYT);
    }

    @Override
    public int getItemCount() {
        return videoList.size();
    }
}
 java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.youtube.player.YouTubePlayerView.initialize(java.lang.String, com.google.android.youtube.player.YouTubePlayer$OnInitializedListener)' on a null object reference
        at adapter.AdapterHome1$YoutubeHolder$1.onClick(AdapterHome1.java:79)
        at android.view.View.performClick(View.java:6935)
        at android.view.View$PerformClick.run(View.java:26214)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:7025)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)