Android youtubeplayer的RecyclerView上的OnClickItem出现异常
我的片段显示了一个youtube播放器和回收器视图,其中包含来自JSON数据的视频列表。现在我正在尝试应用onclick,但它不起作用。我尝试了OnClickListener,但当点击视频时,应用程序崩溃。片段代码如下所示: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
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)