专高二day9知识点

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();
                }
            }
        });



    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值