Java 编辑聊天应用程序中的文本发送功能

Java 编辑聊天应用程序中的文本发送功能,java,android,textwatcher,Java,Android,Textwatcher,我正在制作一个叙事游戏,因为我有一个对话屏幕 用户必须选择一个预先定义的消息来发送它。 choosen消息在编辑文本中传输,但要发送它,用户必须打开swift键盘并单击“发送” 我想创建一个方法,在用户选择后自动发送消息。(跳过键盘上的手动“发送”) 我试过TextWatcher: EditText userInput; RecyclerView recyclerView; List<ResponseMessage> responseMessageList; MessageAdapt

我正在制作一个叙事游戏,因为我有一个对话屏幕

用户必须选择一个预先定义的消息来发送它。 choosen消息在编辑文本中传输,但要发送它,用户必须打开swift键盘并单击“发送”

我想创建一个方法,在用户选择后自动发送消息。(跳过键盘上的手动“发送”)

我试过TextWatcher:

EditText userInput;
RecyclerView recyclerView;
List<ResponseMessage> responseMessageList;
MessageAdapter messageAdapter;
String[] listChoices;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.chapitretest);

  Button btn = (Button) findViewById(R.id.btnChoice);
    btn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
              listChoices = new String[]{"Mdr","Lol","xd"};
            AlertDialog.Builder mBuilder= new AlertDialog.Builder(ChapTest.this);
            mBuilder.setTitle("Ton choix:");
            mBuilder.setSingleChoiceItems(listChoices, -1, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {

                    userInput.setText(listChoices[i]);
                    userInput.addTextChangedListener(new TextWatcher() {
                        @Override
                        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                        }

                        @Override
                        public void onTextChanged(CharSequence s, int start, int before, int count) {

                        }

                        @Override
                        public void afterTextChanged(Editable s) {

                            String txtbulle = userInput.getText().toString();
                        }
                    });

                    dialogInterface.dismiss();
                }
            });
            AlertDialog mDialog = mBuilder.create();
            mDialog.show();
EditText用户输入;
回收视图回收视图;
列出负责人和传道者;
MessageAdapter消息适配器;
字符串[]列表选项;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.chapitretest);
按钮btn=(按钮)findViewById(R.id.btnChoice);
btn.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
listChoices=新字符串[]{“Mdr”、“Lol”、“xd”};
AlertDialog.Builder mBuilder=新建AlertDialog.Builder(ChapTest.this);
mBuilder.setTitle(“tonchoix:”);
setSingleChoiceItems(listChoices,-1,新的DialogInterface.OnClickListener(){
@凌驾
公共void onClick(DialogInterface,inti){
userInput.setText(listChoices[i]);
userInput.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
}
@凌驾
公共无效后文本已更改(可编辑){
字符串txtbulle=userInput.getText().toString();
}
});
dialogInterface.dismise();
}
});
AlertDialog mDialog=mBuilder.create();
mDialog.show();
这是我的第一个应用,谢谢;)

更新:我为什么使用EditText:(对话方法)

userInput=findviewbyd(R.id.userInput);
recyclerView=findViewById(R.id.Conversation);
responseMessageList=新的ArrayList();
messageAdapter=新的messageAdapter(responseMessageList,this);
setLayoutManager(新的LinearLayoutManager(这个,LinearLayoutManager.VERTICAL,false));
recyclerView.setAdapter(messageAdapter);
userInput.setOnEditorActionListener(新的TextView.OnEditorActionListener(){
@凌驾
公共布尔onEditorAction(TextView v、int actionId、KeyEvent事件){
if(actionId==EditorInfo.IME\u ACTION\u SEND){
ResponseMessage message=新的ResponseMessage(userInput.getText().toString(),true);
responseMessageList.add(消息);
ResponseMessage2=新的ResponseMessage(userInput.getText().toString(),false);
responseMessageList.add(消息2);
messageAdapter.notifyDataSetChanged();
如果(!isLastVisible())
recyclerView.smoothScrollToPosition(messageAdapter.getItemCount()-1);
}
返回false;
}
});
}

如果您不打算更改文本,为什么还要将其传输到EditText?相反,只需将文本直接作为输出传递。我更喜欢在EditText中显示所选文本,以反映对话的真实性。我不能对此感到困惑。您将选择显示为列表。当用户选择一个选项时,您将nt自动发送消息(根据问题)。您在EditText中显示消息的步骤是什么?即使您在EditText中显示消息,您希望用户如何发送消息?任何类型的计时器?我编辑了我的帖子。我想使方法EditText.send=true
  userInput = findViewById(R.id.UserInput);

     recyclerView=findViewById(R.id.Conversation);
     responseMessageList = new ArrayList<>();
     messageAdapter=new MessageAdapter(responseMessageList,this);
     recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
     recyclerView.setAdapter(messageAdapter);
    userInput.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {


            if(actionId == EditorInfo.IME_ACTION_SEND){
               ResponseMessage message = new ResponseMessage(userInput.getText().toString(),true);
               responseMessageList.add(message);
               ResponseMessage message2 = new ResponseMessage(userInput.getText().toString(),false);
                responseMessageList.add(message2);
                messageAdapter.notifyDataSetChanged();

                if (!isLastVisible())
                    recyclerView.smoothScrollToPosition(messageAdapter.getItemCount() - 1);
            }
            return false;
        }
    });
}