字符串数组获取每个字符输入而不是完整字?

时间:2017-10-01 02:08:04

标签: android android-intent arraylist android-edittext

我的代码中出现逻辑错误,当我的personArray打印出数组列表Activity_2时会产生以下结果:

情境:

如果用户在EditText字段name中将其姓名键入“John”,则会将其添加到personArray数组列表中。然后它将被传递到我打印出来的Activity_2

但是,打印出来后就是这样:

[J,Jo,Joh,John]

我的其他EditText字段也是如此。我只想在输入时将整个字添加到我的personArray每个字符。

我的变数:

ArrayList<String> personArray = new ArrayList<>;
EditText name = (EditText) findViewById(R.id.name);

我的Text Changed Listener位于onCreate()中的Activity_1

name.addTextChangedListener(new TextWatcher() {
   @Override
   public void onTextChanged(CharSequence s, int i, int i1, int i2){
      //it's supposed to add the user's FULL name input to personArray
      //however it ends up adding EVERY character input instead
      personArray.add(name.getText().toString().trim()); 
   }
});

// repeat code for input for address, country, etc.

我的按钮内的Intent点击进入我的下一个Activity_2

Intent intent = new Intent(Activity_1.this, Activity_2.class);
intent.putStringArrayListExtra("person", personArray);
startActvity(intent);

Activity_2中获取personArray字符串数组:

final List<String> personList = getIntent().getStringArrayListExtra("person");
TextView txtPerson = (TextView) findViewById(R.id.txtPerson);
txtPerson.setText(personList);

我不确定将personArray.add(name.getText().toString().trim());

放在哪里

3 个答案:

答案 0 :(得分:1)

尝试在

中添加代码
@Override public void afterTextChanged(Editable s) {
 // do stuff 
}

<强>更新 或者你可以通过使用焦点获得整个输入。

myEditText.setOnFocusChangeListener(new OnFocusChangeListener() { 
@Override public void onFocusChange(View v, boolean hasFocus) { 
            if (!hasFocus) {
             String editTextInput = myEditText.getText().toString();
             }

     } 
    });

答案 1 :(得分:0)

您应该使用任何字符(例如逗号/ $ whatever)或New Line键或Done键作为分隔符。保留用户提示他们使用任何字符或新行键输入每个新名称。

所以你的逻辑工作将在onTextChanged方法

 @Override
   public void onTextChanged(CharSequence s, int i, int i1, int i2){
       if(s.equals(",") or check new Line or Done key character)
       {
         personArray.add(name.getText().toString().trim()); 
         name.setText("");
       }
   }

答案 2 :(得分:0)

根据TextWatcher的文档,只要文本发生变化,就会调用onTextChanged方法。这意味着此功能将被随时用户更改文本。这包括输入&#34; J&#34; &#34; O&#34; &#34; H&#34;和&#34; n&#34;输入名称&#34; John&#34;。

这就是为什么在你的Activity_2中你将输出视为[J,Jo,Joh,John]。这只是意味着TextWatcher正在做他们应该做的事情。

除了观看每个编辑文本的每个编辑外,您应该在启动意图之前从表单中获取文本(并进行验证)。

void validateDataAndLaunchActivity() {

    String name = name.getText().toString().trim();
    // get the rest of the inputs
    // .. validate the input...
    ArrayList<String> personArray = new ArrayList<>();
    // insert items into your array and launch intent
    Intent intent = new Intent(Activity_1.this, Activity_2.class);
    intent.putStringArrayListExtra("person", personArray);
    startActvity(intent);
}