package com.xiaweizi.qnews.fragment; import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.TextView; import com.xiaweizi.qnews.R; import com.xiaweizi.qnews.adapter.MsgReceivedtemDelagate; import com.xiaweizi.qnews.adapter.MsgSendItemDelagate; import com.xiaweizi.qnews.adapter.RobotAdapter; import com.xiaweizi.qnews.bean.RobotBean; import com.xiaweizi.qnews.bean.RobotMSGBean; import com.xiaweizi.qnews.commons.ActivityUtils; import com.xiaweizi.qnews.commons.Constants; import com.xiaweizi.qnews.commons.LogUtils; import com.xiaweizi.qnews.net.QClitent; import com.xiaweizi.qnews.net.QNewsService; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; /** * 工程名: QNews * 包名: com.xiaweizi.qnews.fragment * 类名: RobotFragment * 创建者: 夏韦子 * 创建日期: 2017/2/11 * 创建时间: 16:12 */ public class RobotFragment extends Fragment implements TextView.OnEditorActionListener { @BindView (R.id.tb_robot) Toolbar tbRobot; @BindView (R.id.rv_robot) RecyclerView rvRobot; @BindView (R.id.et_input) EditText etInput; private RobotAdapter adapter; private List<RobotMSGBean> datas = new ArrayList<>(); private ActivityUtils utils; @Nullable @Override public View onCreateView( LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_robot, null); ButterKnife.bind(this, view); utils = new ActivityUtils(getActivity()); // 设置软键盘的操作 etInput.setImeOptions(EditorInfo.IME_ACTION_SEARCH); // 设置软键盘的操作事件监听 etInput.setOnEditorActionListener(this); // 设置输入的类型: 文本类型 etInput.setInputType(EditorInfo.TYPE_CLASS_TEXT); adapter = new RobotAdapter(getActivity(), datas); adapter.addItemViewDelegate(new MsgReceivedtemDelagate()); adapter.addItemViewDelegate(new MsgSendItemDelagate()); rvRobot.setLayoutManager(new LinearLayoutManager(getActivity())); rvRobot.setAdapter(adapter); RobotMSGBean receiverBean = new RobotMSGBean(); receiverBean.setMsg("您好!我是图灵机器人,有什么可以帮助您吗?"); receiverBean.setType(RobotMSGBean.MSG_RECEIVED); adapter.addDataToAdapter(receiverBean); adapter.notifyDataSetChanged(); rvRobot.smoothScrollToPosition(adapter.getItemCount() - 1); return view; } @OnClick (R.id.bt_send) public void onClick(View view) { sendMsg(); } private void sendMsg() { String msg = etInput.getText().toString(); if (TextUtils.isEmpty(msg)) { etInput.setError("内容不能为空"); return; } RobotMSGBean sendBean = new RobotMSGBean(); sendBean.setMsg(msg); sendBean.setType(RobotMSGBean.MSG_SEND); etInput.setText(""); adapter.addDataToAdapter(sendBean); adapter.notifyDataSetChanged(); QClitent.getInstance() .create(QNewsService.class, Constants.BASE_Q_A_ROBOT_URL) .getQARobotData(msg) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<RobotBean>() { @Override public void accept(RobotBean s) throws Exception { String text = s.getResult().getText(); RobotMSGBean receiverBean = new RobotMSGBean(); receiverBean.setMsg(text); receiverBean.setType(RobotMSGBean.MSG_RECEIVED); adapter.addDataToAdapter(receiverBean); adapter.notifyDataSetChanged(); rvRobot.smoothScrollToPosition(adapter.getItemCount() - 1); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { LogUtils.i("error: " + throwable.getMessage()); } }); } @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { Log.i("----->", "onEditorAction: " + actionId); if (actionId == EditorInfo.IME_ACTION_SEND) { Log.i("---->", "IME_ACTION_SEND: "); sendMsg(); return true; } else { Log.i("------", "onEditorAction: "); } closeKeyBoard(); return false; } private void closeKeyBoard() { etInput.clearFocus(); //关闭软键盘 InputMethodManager inputMethodManager = (InputMethodManager) getContext().getSystemService( Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(etInput.getWindowToken(), 0); } }