Android OnItemClickListener未响应回收器视图中的JSON项列表
获取youtube视频列表的Json数据并将其分配给recycler view。recycler视图的适配器类如下所示适配器家庭1Android OnItemClickListener未响应回收器视图中的JSON项列表,android,android-fragments,android-recyclerview,youtube-data-api,Android,Android Fragments,Android Recyclerview,Youtube Data Api,获取youtube视频列表的Json数据并将其分配给recycler view。recycler视图的适配器类如下所示适配器家庭1 public class AdapterHome2 extends RecyclerView.Adapter<AdapterHome2.YoutubeHolder> { private Context context; private List<VideoYT> videoList; private int sele
public class AdapterHome2 extends RecyclerView.Adapter<AdapterHome2.YoutubeHolder> {
private Context context;
private List<VideoYT> videoList;
private int selectedPosition = 0;
public
AdapterHome2(Context context, List<VideoYT> videoList) {
this.context = context;
this.videoList = videoList;
}
public
void setSelectedPosition(int selectedPosition) {
this.selectedPosition = selectedPosition;
//when item selected notify the adapter
notifyDataSetChanged();
}
@NonNull
@Override
public YoutubeHolder onCreateViewHolder(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(YoutubeHolder holder, int position) {
VideoYT videoYT = videoList.get(position);
YoutubeHolder yth = holder;
yth.setData(videoYT);
}
@Override
public
int getItemCount() {
return videoList.size();
}
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();
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);
}
});
}
}
}
这是一个谦卑的请求,请指导我,因为我正在努力实现这一点
public class Fragment2 extends Fragment {
private List<VideoYT> videoList = new ArrayList<>();
private LinearLayoutManager manager;
private AdapterHome2 adapterHome2;
private String nextPageToken = "";
private boolean isScroll = false;
private int currentItem, totalItem, scrollOutItem;
private YouTubePlayer youTubePlayer;
private YouTubePlayerSupportFragmentX youTubePlayerFragment;
private RecyclerView rv;
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();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.youtube_layout, youTubePlayerFragment).commit();
youTubePlayerFragment.initialize(Constants.DEVELOPER_KEY, new YouTubePlayer.OnInitializedListener() {
// mYouTubePlayerView.initialize(Constants.DEVELOPER_KEY, mOnInitializedListener);
// 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");
}
});
//RecyclerView
rv = view.findViewById(R.id.recyclerView);
adapterHome2 = new AdapterHome2(getContext(),videoList);
manager = new LinearLayoutManager(getContext());
rv.setAdapter(adapterHome2);
rv.setLayoutManager(manager);
rv.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public
void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
isScroll = true;
}
}
@Override
public
void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
currentItem = manager.getChildCount();
totalItem = manager.getItemCount();
scrollOutItem = manager.findFirstVisibleItemPosition();
if (isScroll && (currentItem + scrollOutItem == totalItem)) {
isScroll = false;
loadJSON();
}
}
});
if (videoList.size() == 0){
loadJSON();
}
ItemClickListener();
return view;
}
public void loadJSON() {
String url = YoutubeAPI.BASE_URL + YoutubeAPI.sch + YoutubeAPI.KEY + YoutubeAPI.mx + YoutubeAPI.ord
+ YoutubeAPI.part + YoutubeAPI.query1 + YoutubeAPI.type;
if (nextPageToken != ""){
url = url + YoutubeAPI.NPT + nextPageToken;
}
if (nextPageToken == null){
return;
}
Call<ModelHome> data = YoutubeAPI.getVideo().getHomeVideo(url);
data.enqueue(new Callback<ModelHome>() {
@Override
public void onResponse(Call<ModelHome> call, Response<ModelHome> response) {
if (response.errorBody() != null){
Log.w(TAG, "onResponse: " + response.errorBody() );
try {
Toast.makeText(getContext(), response.errorBody().string(), Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
} else {
ModelHome mh = response.body();
videoList.addAll(mh.getItems());
adapterHome2.notifyDataSetChanged();
if (mh.getNextPageToken() != null){
nextPageToken = mh.getNextPageToken();
}
}
}
@Override
public void onFailure(Call<ModelHome> call, Throwable t) {
Log.e(TAG, "onFailure: ", t);
Toast.makeText(getContext(), t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
private
void ItemClickListener() {
adapterHome2 = new AdapterHome2(getContext(),videoList);
rv.setAdapter(adapterHome2);
rv.addOnItemTouchListener(new RecyclerViewOnClickListener3(getContext(),new RecyclerViewOnClickListener3.OnItemClickListener() {
@Override
public
void onItemClick(View view3, int position) {
if (youTubePlayerFragment != null && youTubePlayer != null) {
adapterHome2.setSelectedPosition(position);
youTubePlayer.loadVideo(String.valueOf(videoList.get(position)));
}
}
}));
}
public class RecyclerViewOnClickListener3 implements RecyclerView.OnItemTouchListener {
private RecyclerViewOnClickListener3.OnItemClickListener mListener3;
private GestureDetector mGestureDetector3;
public interface OnItemClickListener {
void onItemClick(View view3, int position3);
}
public RecyclerViewOnClickListener3(Context context, RecyclerViewOnClickListener3.OnItemClickListener listener) {
mListener3 = listener;
mGestureDetector3 = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView view3, MotionEvent e) {
View childView = view3.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener3 != null && mGestureDetector3.onTouchEvent(e) ){
mListener3.onItemClick(childView, view3.getChildPosition(childView));
return true;
}
return false;
}
@Override
public void onTouchEvent(RecyclerView view3, MotionEvent motionEvent3) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
}