仿在线聊天,一问一答

actvivity:

public class OnlineConChangeActivity extends BaseActivity<OnlineConsultationPresenter> implements OnlineConsultationContract.View {
    int currentPosition = 0;//记录当前item位置
    private ActivityOnlineConsultationBinding mBinding;
    private OnlineChartAdapter adapter;
    private String question;
    private List<SendQuestionBean.DataBean> list = new ArrayList<>();
    private CallPhonePop pop;//拨打电话弹窗
    private PopCallPhoneAdapter popCallPhoneAdapter;

    @Override

    protected void initView(Bundle savedInstanceState, View mRootView) {
        addDebouncingViews(mBinding.btSend, mBinding.rvPublicTitle.publicBackRl, mBinding.linearChartContent);
        mBinding.rvPublicTitle.publicTitleText.setText("在线咨询");
        initAdapter();
    }

    private void initAdapter() {
        adapter = new OnlineChartAdapter(R.layout.item_chat);
        mBinding.rvChartWork.setLayoutManager(new LinearLayoutManager(mContext));
        mBinding.rvChartWork.setAdapter(adapter);
        adapter.setList(list);
    }

    //拨打电话弹窗
    private void initPop() {
        if (pop == null) {
            pop = new CallPhonePop(mContext);
        }
        popCallPhoneAdapter = new PopCallPhoneAdapter(R.layout.item_phone_num);
        pop.PhoneNUM.setLayoutManager(new LinearLayoutManager(this));
        pop.PhoneNUM.setAdapter(popCallPhoneAdapter);
        popCallPhoneAdapter.setList(list.get(0).getServicePhones());

        popCallPhoneAdapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
                Intent intent = new Intent(Intent.ACTION_DIAL);
                Uri data = Uri.parse("tel:" + list.get(0).getServicePhones().get(position));
                intent.setData(data);
                startActivity(intent);
            }
        });

        pop.cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                pop.dismiss();
            }
        });
        pop.setBlurBackgroundEnable(false);
        pop.setOutSideTouchable(true);
        pop.setPopupGravity(Gravity.BOTTOM);
        pop.showPopupWindow();
    }


    @Override
    protected void initData(Bundle bundle) {
        mPresenter = new OnlineConsultationPresenter(this);
        mPresenter.getFirstQuestion();
    }

    @Override
    protected void doBusiness() {

        mBinding.etInputQuestion.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                //输入前监听


            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                //输入中监听
                String body = mBinding.etInputQuestion.getText().toString().trim();
                if (!TextUtils.isEmpty(body)) {
                    mPresenter.getQuestion(body);
                    mBinding.rvKeyInputQuestion.setVisibility(View.VISIBLE);
                }


            }

            @Override
            public void afterTextChanged(Editable editable) {
                //输入后监听
                String body = mBinding.etInputQuestion.getText().toString().trim();
                if (body.isEmpty()) {
                    mBinding.rvKeyInputQuestion.setVisibility(View.GONE);
                }


            }
        });

    }

    @Override
    protected View bindLayout() {

        mBinding = ActivityOnlineConsultationBinding.inflate(getLayoutInflater());
        return mBinding.getRoot();
    }

    @Override
    protected void onViewClick(View v) {
        switch (v.getId()) {
            case R.id.bt_send:
                question = mBinding.etInputQuestion.getText().toString().trim();
                mPresenter.getSendQuestion(question);
                break;
            case R.id.public_back_rl:
                finish();
                break;
            case R.id.linear_chart_content:
                initPop();
                break;
            default:
                break;
        }

    }

    //可能想咨询的问题列表
    @Override
    public void getFirstQuestionSuccess(QuestionFirstBean bean) {

        List<QuestionFirstBean.DataBean> mBean = bean.getData();
        FirstQuestionAdapter firstQuestionAdapter = new FirstQuestionAdapter(R.layout.item_first_question);
        mBinding.cardFirstQues.rvFirstQues.setLayoutManager(new LinearLayoutManager(this));
        mBinding.cardFirstQues.rvFirstQues.setAdapter(firstQuestionAdapter);
        firstQuestionAdapter.setList(mBean);
        firstQuestionAdapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> b, @NonNull View view, int position) {
                currentPosition = position;
                //点击列表item,发送问题id,请求接口
                String question = firstQuestionAdapter.getItem(position).getQuestion();
                SendQuestionBean.DataBean bean1 = new SendQuestionBean.DataBean();
                bean1.setType(OnlineChartAdapter.TYPE_RIGHT);
                bean1.setAnswerType("1");
                bean1.setAnswerContent(question);

                adapter.addData(adapter.getItemCount(), bean1);
                // 滚动到最后一条数据
                mBinding.rvChartWork.scrollToPosition(adapter.getItemCount() - 1);

                int id = mBean.get(position).getId();
                mPresenter.getAnswer(String.valueOf(id));
            }
        });

    }

    //关键词---输入框内容的联想列表
    @Override
    public void getQuestionSuccess(QuestionBean bean) {
        List<QuestionBean.DataBean> questionBean = bean.getData();
        //判断按钮是否可以点击
        if (questionBean.isEmpty()) {
            //按钮可以点
            mBinding.btSend.setEnabled(true);
            mBinding.btSend.setBackgroundResource(R.color.blue_7196ff);
        } else {
            mBinding.btSend.setEnabled(false);
            mBinding.btSend.setBackgroundResource(R.color.gray_b0);

        }
        QuestionAdapter questionAdapter = new QuestionAdapter(R.layout.item_key_question);
        mBinding.rvKeyInputQuestion.setLayoutManager(new LinearLayoutManager(this));
        mBinding.rvKeyInputQuestion.setAdapter(questionAdapter);
        questionAdapter.setList(questionBean);


        questionAdapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> a, @NonNull View view, int position) {
                String question = questionAdapter.getItem(position).getQuestion();
                SendQuestionBean.DataBean bean1 = new SendQuestionBean.DataBean();
                bean1.setType(OnlineChartAdapter.TYPE_RIGHT);
                bean1.setAnswerType("1");
                bean1.setAnswerContent(question);
                adapter.addData(adapter.getItemCount(), bean1);
                // 滚动到最后一条数据
                mBinding.rvChartWork.scrollToPosition(adapter.getItemCount() - 1);
                // 清空输入框
                mBinding.etInputQuestion.setText("");
                int id = questionBean.get(position).getId();
                mPresenter.getAnswer(String.valueOf(id));
            }
        });

    }

    //发送问题
    @Override
    public void getSendQuestionSuccess(SendQuestionBean bean) {
        List<SendQuestionBean.DataBean> mBean = bean.getData();
        list.addAll(mBean);
        if (!TextUtils.isEmpty(question)) {
            SendQuestionBean.DataBean bean1 = new SendQuestionBean.DataBean();
            bean1.setType(OnlineChartAdapter.TYPE_RIGHT);
            bean1.setAnswerType("1");
            bean1.setAnswerContent(question);

            SendQuestionBean.DataBean bean2 = new SendQuestionBean.DataBean();
            bean2.setType(OnlineChartAdapter.TYPE_LEFT);
            bean2.setAnswerType("3");
            for (int i = 0; i < mBean.size(); i++) {
                bean2.setAnswerContent(mBean.get(i).getAnswerContent());
            }
            adapter.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter1, @NonNull View view, int position) {
                    if ("3".equals(adapter.getItem(position).getAnswerType())) {
                        initPop();
                    }

                }
            });

            // 有新问题时,在列表最后插入数据
            adapter.addData(adapter.getItemCount(), bean1);
            adapter.addData(adapter.getItemCount(), bean2);
            // 滚动到最后一条数据
            mBinding.rvChartWork.scrollToPosition(adapter.getItemCount() - 1);
            // 清空输入框
            mBinding.etInputQuestion.setText("");
        }
    }

    @Override
    public void getAnswerSuccess(AnswerBean bean) {
        List<AnswerBean.DataBean> beans = bean.getData();
        SendQuestionBean.DataBean bean2 = new SendQuestionBean.DataBean();
        bean2.setType(OnlineChartAdapter.TYPE_LEFT);
        bean2.setAnswerType("1");
        for (int i = 0; i < beans.size(); i++) {
            if ("1".equals(beans.get(i).getAnswerType())) {
                bean2.setAnswerContent(beans.get(i).getAnswerContent());
            }
        }
        adapter.addData(adapter.getItemCount(), bean2);

        // 滚动到最后一条数据
        mBinding.rvChartWork.scrollToPosition(adapter.getItemCount() - 1);

        for (int i = 0; i < beans.size(); i++) {
            if ("2".equals(beans.get(i).getAnswerType())) {
                SendQuestionBean.DataBean bean3 = new SendQuestionBean.DataBean();
                bean3.setType(OnlineChartAdapter.TYPE_LEFT);
                bean3.setAnswerType("2");
                bean3.setAnswerContent(beans.get(i).getAnswerContent());
                adapter.addData(adapter.getItemCount(), bean3);
                // 滚动到最后一条数据
                mBinding.rvChartWork.scrollToPosition(adapter.getItemCount() - 1);
            }
        }


    }
}

adapter:此处在bean中定义了
private int Type; //消息类型,RIGHT为用户发送出去的消息,LEFT为用户接收到的消息

public class OnlineChartAdapter extends BaseQuickAdapter<SendQuestionBean.DataBean, BaseViewHolder> {
    public static final int TYPE_RIGHT = 1;
    public static final int TYPE_LEFT = 2;

    public OnlineChartAdapter(int layoutResId) {
        super(layoutResId);
    }


    @Override
    protected void convert(@NotNull BaseViewHolder holder, SendQuestionBean.DataBean item) {
        if (item.getType() == TYPE_RIGHT) {
            //如果是type是右边,说明是用户发送出去的消息,应该显示右边,并隐藏左边
            holder.setVisible(R.id.rightLayout, true); //显示右边布局
            holder.setGone(R.id.leftLayout, true); //隐藏左边布局
            if (getItem(holder.getAdapterPosition()).getAnswerType().equals("2")) {
                // 如果getAnswerType等于2,说明内容是图片,则显示图片,隐藏文本
                holder.setVisible(R.id.rightContentImg, true); //显示图片
                holder.setGone(R.id.rightContentTv, true); //隐藏文本
                Glide.with(getContext())
//                        .load(Api.API_BASE + "/common/images/"+ item.getAnswerContent())
                        .load(item.getAnswerContent())
                        .into((AppCompatImageView) holder.getView(R.id.rightContentImg));
            } else {
                // 如果getAnswerType不等于2,说明内容是文字,则显示文本,隐藏图片
                holder.setVisible(R.id.rightContentTv, true); //显示文本
                holder.setGone(R.id.rightContentImg, true); //隐藏图片
                holder.setText(R.id.rightContentTv, item.getAnswerContent());
            }
        } else if (item.getType() == TYPE_LEFT) {
            //如果是type是左边,说明是用户接收到的消息,应该显示左边,并隐藏右边
            holder.setVisible(R.id.leftLayout, true); //显示左边布局
            holder.setGone(R.id.rightLayout, true); //隐藏右边布局
            if (getItem(holder.getAdapterPosition()).getAnswerType().equals("2")) {
                // 如果getAnswerType等于2,说明内容是图片,则显示图片,隐藏文本
                holder.setVisible(R.id.leftContentImg, true); //显示图片
                holder.setGone(R.id.leftContentTv, true); //隐藏文本
                Glide.with(getContext())
                        .load(Api.API_BASE + "/common/images/" + item.getAnswerContent())
                        .into((AppCompatImageView) holder.getView(R.id.leftContentImg));
            } else if (getItem(holder.getAdapterPosition()).getAnswerType().equals("1")) {
                // 如果getAnswerType不等于2,说明内容是文字,则显示文本,隐藏图片
                holder.setVisible(R.id.leftContentTv, true); //显示文本
                holder.setGone(R.id.leftContentImg, true); //隐藏图片
                holder.setText(R.id.leftContentTv, item.getAnswerContent());
            } else if (getItem(holder.getAdapterPosition()).getAnswerType().equals("3")) {
                // 如果getAnswerType为3,说明内容是文字,而且有点击事件,操作应该同文本
                holder.setGone(R.id.leftContentImg, true); //隐藏图片
                holder.setText(R.id.leftContentTv, item.getAnswerContent());
            }
        }
    }
}

//这个界面因为activity有点击某一项打电话的功能,这个pop是根据框架写的,其他地方使用需要根据具体情况进行修改

效果图在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值