【发布时间】:2017-03-02 20:38:19
【问题描述】:
我正在编写一个使用和外部连接的 USB 条形码/RFID 扫描仪的应用程序。正在扫描的数据是“复合”数据。这是一个例子:
=+03000=W12560712345600=%2800&>0090452359
这是来自复合数据扫描。数据中的分隔符是等号 (=) 或与号 (&)。第一个位=+03000表示扫描中有三个数据部分:
=W12560712345600
=%2800
&>0090452359
此数据可以包含从 1 到 N 的任意数量的数据部分。
在我的 Android 应用程序中,我有一个包含三个 EditText 元素的表单。我需要对这个复合扫描数据做的是使用分隔符将其分解,并将每条数据粘贴到正确的 EditText 字段中。
在经历了很多痛苦之后,我意识到我不能只操作标准输入,而且我需要在我的 EditText 字段之一上使用 TextWatcher 来捕获扫描的数据,以便我可以操作它。
我的问题是我无法弄清楚如何做到这一点。这是我所拥有的:
activity_main.xml
<LinearLayout>
<TextView />
<EditText android:id="@+id/datafield01" />
<EditText android:id="@+id/datafield02" />
<EditText android:id="@+id/datafield03" />
<Button />
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText dataField01 = (EditText)findViewById(R.id.datafield01);
EditText dataField02 = (EditText)findViewById(R.id.datafield02);
EditText dataField02 = (EditText)findViewById(R.id.datafield03);
dataField01.addTextChangedListener(editTextWatcher);
}
TextWatcher editTextWatcher = 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(CharSequence s){
}
};
}
我尝试将 CharSequence 捕获到 StringBuffer 中 - 使用 before、on 和 afterTextChanged - 所以我可以操纵它并将其放入正确的 EditText 元素中,但我没有成功。
修改 MainActivity.java
public class MainActivity extends AppCompatActivity {
private StringBuffer stringBuffer;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
stringBuffer = new StringBuffer();
EditText dataField01 = (EditText)findViewById(R.id.datafield01);
EditText dataField02 = (EditText)findViewById(R.id.datafield02);
EditText dataField02 = (EditText)findViewById(R.id.datafield03);
dataField01.addTextChangedListener(editTextWatcher);
System.out.println(stringBuffer.toString());
}
TextWatcher editTextWatcher = 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){
stringBuffer.append(s);
}
@Override
public void afterTextChanged(CharSequence s){
}
};
}
每当我尝试System.out.println(stringbuffer); 时,那里什么都没有。
扫描的代码没有给出换行符或任何其他类型的分隔符,它已经结束,数据部分的数量可以是 1 到 N,但每个数据部分确实有一个已知的固定长度。
肯定有其他人在做这样的事情,但我的谷歌搜索没有结果。
那么,有什么方法可以完成我想做的事情,还是我完全不走运?
谢谢。
【问题讨论】:
-
我会有一个 EditText 来捕获传入的数据,然后使用 textwatcher 将数据解析/分解为 3 个不同的字段,然后更新 01-03 EditText 字段。
-
是的......这就是我正在尝试做的事情,但没有运气。
-
您的扫描文本是否出现在数据字段 01 中?
-
是的,确实如此。或任何有焦点的领域。
标签: android textwatcher