Api (关注,评论)
@POST("/guanzhu/noguanzhu") Observable<ResultEntity> postnoGuanZhu(@Body RequestBody body); @GET("comment/getCommentByVideoId?") Observable<CommentEntity> getPingLun(@Query("videoId")int videoId); @POST("/comment/comment") Observable<CommentEntity> postSendCommentData(@Body RequestBody body);
Model
public Observable<ResultEntity> postnoGuanZhu(RequestBody body){ return api.postnoGuanZhu(body); } public Observable<CommentEntity> getPingLun(int videoId){ return api.getPingLun(videoId); } public Observable<CommentEntity> postSendCommentData( RequestBody body){ return api.postSendCommentData(body); }
ViewModel
public void postNoDianZan(int videoId){ mModel.postNoDianZan(videoId) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Observer<ResultEntity>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(ResultEntity resultEntity) { NodianzanLiveData.postValue(resultEntity); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } public void postNoGuanZhu(RequestBody body){ mModel.postnoGuanZhu(body) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<ResultEntity>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(ResultEntity resultEntity) { NoguanzhuLiveData.postValue(resultEntity); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } public void getPingLun(int videoId){ mModel.getPingLun(videoId) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Observer<CommentEntity>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(CommentEntity commentEntity) { Log.i("TagA","评论:"+commentEntity); getPingLunLiveData.postValue(commentEntity); } @Override public void onError(Throwable e) { Log.i("TagA","获取评论失败:"+e.getMessage()); } @Override public void onComplete() { } }); } public void postSendPinglun(RequestBody body){ mModel.postSendCommentData(body) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<CommentEntity>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(CommentEntity commentEntity) { postSendPingLunLiveData.postValue(commentEntity); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); }
Fragment
public class TuijianFragment extends BaseFragment<FragmentTuijianBinding,TuiJianViewModel> { public MyTuiJianAdapter myTuiJianAdapter; private MyCommentAdapter myCommentAdapter; private List<CommentEntity.DataBean> commentList = new ArrayList<>(); @Override protected void initData() { myTuiJianAdapter=new MyTuiJianAdapter(); viewDataBind.rvTuijian.setAdapter(myTuiJianAdapter); DYLinnerLayoutManager dyLinnerLayoutManager=new DYLinnerLayoutManager(getContext()); viewDataBind.rvTuijian.setLayoutManager(dyLinnerLayoutManager); // //自动播放 viewDataBind.rvTuijian.setOnScrollChangeListener(new View.OnScrollChangeListener() { @Override public void onScrollChange(View view, int i, int i1, int i2, int i3) { int firstVisibleItemPosition = dyLinnerLayoutManager.findFirstVisibleItemPosition(); StandardGSYVideoPlayer standardGSYVideoPlayer= (StandardGSYVideoPlayer) myTuiJianAdapter.getViewByPosition(firstVisibleItemPosition,R.id.gsy); standardGSYVideoPlayer.startPlayLogic(); } }); myTuiJianAdapter.addChildClickViewIds(R.id.iv_add,R.id.iv_tou,R.id.iv_pinglun,R.id.iv_shoucang,R.id.iv_fengxiang,R.id.iv_fason_pl); myTuiJianAdapter.setOnItemChildClickListener(new OnItemChildClickListener() { @Override public void onItemChildClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position) { switch (view.getId()){ case R.id.iv_add: guanzhu(position); break; case R.id.iv_tou: dianzan(position); break; case R.id.iv_pinglun: pinglun(position); break; case R.id.iv_close: closepinglun(position); break; case R.id.iv_fason_pl: sendpinglun(position); break; } } }); } private void sendpinglun(int position) { EditText et_input_pl= (EditText) myTuiJianAdapter.getViewByPosition(position,R.id.et_inpt_pl); String msg=et_input_pl.getText().toString().trim(); int videoId=myTuiJianAdapter.getData().get(position).getId(); if(!TextUtils.isEmpty(msg)){ Map<String,Object> map=new HashMap<>(); map.put("msg",msg); map.put("videoId",videoId); //将map集合转换为json String json=new Gson().toJson(map); RequestBody requestBody=RequestBody.create(MediaType.parse("application/json;charset=utf-8"),json); //启动mvvm viewModel.postSendPinglun(requestBody); } CommentEntity.DataBean dataBean=new CommentEntity.DataBean(); dataBean.setMsg(msg); dataBean.setIcon(SPUtils.getInstance().getString("icon")); dataBean.setMsg(SPUtils.getInstance().getString("nickname")); myCommentAdapter.getData().add(dataBean); myCommentAdapter.addData(0,dataBean); myCommentAdapter.notifyDataSetChanged(); } //关闭评论 private void closepinglun(int position) { ConstraintLayout cl_pinglun = (ConstraintLayout) myTuiJianAdapter.getViewByPosition(position,R.id.cl_pinglun); cl_pinglun.setVisibility(View.GONE); Animation animation= AnimationUtils.loadAnimation(getContext(),R.anim.out); cl_pinglun.startAnimation(animation); } //评论 private void pinglun(int position) { ConstraintLayout cl_pinglun = (ConstraintLayout) myTuiJianAdapter.getViewByPosition(position,R.id.cl_pinglun); cl_pinglun.setVisibility(View.VISIBLE); Animation animation= AnimationUtils.loadAnimation(getContext(),R.anim.in); //设置差值器 animation.setInterpolator(new BounceInterpolator()); cl_pinglun.startAnimation(animation); //获取到ID int videoId=myTuiJianAdapter.getData().get(position).getId(); viewModel.getPingLun(videoId); Log.i("TagA","视频id:"+videoId); //获取控件 RecyclerView rv_pinglun= (RecyclerView) myTuiJianAdapter.getViewByPosition(position,R.id.rv_pinglun); rv_pinglun.setLayoutManager(new LinearLayoutManager(getContext())); rv_pinglun.setAdapter(myCommentAdapter); Log.i("TagA","list:"+commentList); } private void guanzhu(int position) { String authname=myTuiJianAdapter.getData().get(position).getAuthname(); Map<String, String> map = new HashMap<>(); map.put("autname", authname); String s = new Gson().toJson(map); RequestBody body = RequestBody.create(MediaType.parse("application/json"), s); ImageView iv_add=(ImageView) myTuiJianAdapter.getViewByPosition(position,R.id.iv_add); if(b){ viewModel.postNoGuanZhu(body); //图片变化 iv_add.setImageResource(R.drawable.baseline_add_24); iv_add.setBackground(getContext().getDrawable(R.drawable.ic_launcher_background)); //动画 ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(iv_add,"Alpha",0,1); objectAnimator.setDuration(2000); objectAnimator.start(); b=false; myTuiJianAdapter.getData().get(position).setGuanzhu(0); }else{ viewModel.postGuanzhu(body); iv_add.setBackground(getContext().getDrawable(R.drawable.ic_launcher_background)); iv_add.setImageResource(R.drawable.baseline_check_24); ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(iv_add,"Alpha",1,0); objectAnimator.setDuration(2000); objectAnimator.start(); b=true; myTuiJianAdapter.getData().get(position).setGuanzhu(1); } } //点赞 private void dianzan(int position) { VideoEntity.DataBean dataBean = myTuiJianAdapter.getData().get(position); int id = dataBean.getId(); viewModel.postDianZan(id); ImageView iv_dianzan=(ImageView) myTuiJianAdapter.getViewByPosition(position,R.id.iv_tou); if(dataBean.getDianzan()==0){ iv_dianzan.setImageResource(R.drawable.baseline_favorite_24_1); //动画 ObjectAnimator scaleX=ObjectAnimator.ofFloat(iv_dianzan,"scaleX",1,2,1); ObjectAnimator scaleY=ObjectAnimator.ofFloat(iv_dianzan,"scaleY",1,2,1); AnimatorSet animatorSet=new AnimatorSet(); animatorSet.play(scaleX).with(scaleY); animatorSet.setDuration(2000); animatorSet.start(); //文字 TextView tv_dianzan= (TextView) myTuiJianAdapter.getViewByPosition(position,R.id.tv_dizan); int loke_count=dataBean.getLike_count(); loke_count++; tv_dianzan.setText(loke_count+""); dataBean.setDianzan(1); }else{ viewModel.postNoDianZan(id); iv_dianzan.setImageResource(R.drawable.baseline_favorite_24); dataBean.setDianzan(0); } } boolean b=false; //关注 @Override protected void initView() { viewModel.getVideo(8,10); // viewModel.getPingLun(6); } @Override protected int getLayoutId() { return R.layout.fragment_tuijian; } @Override protected Class<TuiJianViewModel> getViewModel() { return TuiJianViewModel.class; } public static TuijianFragment newInstance(){ Bundle bundle=new Bundle(); TuijianFragment tuijianFragment = new TuijianFragment(); tuijianFragment.setArguments(bundle); return tuijianFragment; } @Override protected void handObserver() { super.handObserver(); viewModel.VideoLiveData.observe(this, new Observer<VideoEntity>() { @Override public void onChanged(VideoEntity videoEntity) { if(videoEntity.getCode()==200){ List<VideoEntity.DataBean> list=videoEntity.getData(); myTuiJianAdapter.getData().addAll(list); myTuiJianAdapter.notifyDataSetChanged(); } } }); viewModel.guanzhuLiveData.observe(this, new Observer<ResultEntity>() { @Override public void onChanged(ResultEntity resultEntity) { if(resultEntity.getCode()==200){ Toast.makeText(getContext(), "关注成功", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(getContext(), "关注失败", Toast.LENGTH_SHORT).show(); } } }); viewModel.dianzanLiveData.observe(this, new Observer<ResultEntity>() { @Override public void onChanged(ResultEntity resultEntity) { if (resultEntity.getCode() == 200){ Toast.makeText(getContext(), "点赞成功", Toast.LENGTH_SHORT).show(); }else { Toast.makeText(getContext(), "点赞失败", Toast.LENGTH_SHORT).show(); } } }); viewModel.getPingLunLiveData.observe(this, new Observer<CommentEntity>() { @Override public void onChanged(CommentEntity commentEntity) { if(commentEntity.getCode()==200){ if (commentEntity!=null){ Log.d("sss", "onChanged: "+commentEntity.getData().size()); List<CommentEntity.DataBean> data = commentEntity.getData(); myCommentAdapter=new MyCommentAdapter(R.layout.item_pl); myCommentAdapter.getData().addAll(data); myCommentAdapter.notifyDataSetChanged(); } Toast.makeText(getContext(), "获取评论成功", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(getContext(), "获取评论失败", Toast.LENGTH_SHORT).show(); } } }); viewModel.postSendPingLunLiveData.observe(this, new Observer<CommentEntity>() { @Override public void onChanged(CommentEntity commentEntity) { if (commentEntity.getCode() == 200){ Toast.makeText(getContext(), "发表评论成功", Toast.LENGTH_SHORT).show(); }else { Toast.makeText(getContext(), "发表评论失败", Toast.LENGTH_SHORT).show(); } } }); } }