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是根据框架写的,其他地方使用需要根据具体情况进行修改
效果图