我的代码中出现逻辑错误,当我的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());
答案 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);
}