gpt4 book ai didi

java - 带有 TextWatcher 的 EditText 显示有线行为并在递归循环中移动

转载 作者:太空狗 更新时间:2023-10-29 15:07:31 26 4
gpt4 key购买 nike

我正在将条形码扫描数据获取到编辑文本中。在那个 Edittext 上,我应用了带有 Textwatcher 类的 addTextChangedListener。但它显示出有线行为。它在第一次工作正常,但从下一次开始进入递归循环。由于此 Edittext 的递归行为,我扫描的一项添加了三次。下面是我正在使用的代码。

 EditText   barcodeScanner =(EditText)findViewById(R.id.barcodeFocus);
TextWatcher textwatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub

}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub

}
@Override
public void afterTextChanged(Editable s) {
Log.d("@@@@", s.toString());
if (s.length() > 1) {
// TODO Auto-generated method stub
if(flag){
char lastCharacter = s.charAt(s.length() - 1);

if (lastCharacter == 'p') {
String barcode = s.subSequence(0, s.length() - 1).toString();
Log.d("Id before parsing", barcode);
int btnId = Integer.parseInt(barcode.trim());

getItemsInformation(btnId);

}
flag = false;
}
else
flag = true;
}
}

};
barcodeScanner.addTextChangedListener(textwatcher);

private void getItemsInformation(int btnId) {
ProductOptionsDbHandler productOptionDbHandler = new ProductOptionsDbHandler(this);
List<String> optionNames = productOptionDbHandler.getProductOptions(btnId);
Product productdetails = prodDbHand.getSelecteProductsDetails(btnId);
float price = productdetails.getProductPrice();
if(optionNames.size()>0 || price == 0){
Intent intent = new Intent(this,ItemPopUpTabActivity.class);
intent.putExtra("intVariableName", btnId);
intent.putExtra("itemPrice", price);
intent.putExtra("itemTax", productdetails.getTaxRate());
startActivity(intent);
barcodeScanner.removeTextChangedListener(textwatcher);
barcodeScanner.setText("");
barcodeScanner.addTextChangedListener(textwatcher);
}
else{
listofItemList.add(productdetails);
QtyOfItems.add(1);
ItemsPrice.add(price);
ItemsIds.add(productdetails.getProductId());
itemTaxRate.add(productdetails.getTaxRate());
addItemintocheckoutList(price,productdetails);
List<String> itemsOptions = new ArrayList<String>();
itemsOptionsIds.add(itemsOptions);
Variables.itemposition++;
barcodeScanner.removeTextChangedListener(textwatcher);
barcodeScanner.setText("");
barcodeScanner.addTextChangedListener(textwatcher);
}

}

条形码的输入类似于 002p。我试过

barcodeScanner.removeTextChangedListener(textwatcher);

barcodeScanner.setText("");

barcodeScanner.addTextChangedListener(textwatcher);

最后完成工作后,但没有任何改变。我已经尝试过有人在 SO EditText, OnKeyListener or TextWatcher (barcode scanning) 上提出的一个类似问题请指导我哪里做错了。任何帮助表示赞赏。

最佳答案

您的问题是它会计算您分别输入的每个字符,因此如果您输入单个数字输入,它会很好地工作,否则它会占用输入的每个字符。我也遇到了同样的问题,还没解决

关于java - 带有 TextWatcher 的 EditText 显示有线行为并在递归循环中移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20488126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com