我正在制作一个电子商务应用,其购物车列表包含ListView
个自定义EditText
。 EditText
代表商品数量。我正在使用OnFocusChangeListener
来检测客户何时更改项目的数量,然后更新服务器上的购物车。一切正常,只有onFocusChange
被调用两次,即我得到false
两次。
viewHolder.etProductQuantity.setOnFocusChangeListener( new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if(!hasFocus){
// Updating the ProductList class's object to set the new quantity
// Updating product quantity on server
Log.d("Product Quantity", viewHolder.etProductQuantity.getText().toString() + b);
}
}
});
因此,编码正在执行两次,这就产生了问题。
答案 0 :(得分:2)
将以下行添加到清单中的活动中修复了问题:
android:windowSoftInputMode="adjustPan"
不确定为什么。
答案 1 :(得分:1)
您可以这样使用:
edt_sys_log_search.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId==EditorInfo.IME_ACTION_DONE){
//do calling WS
}
return false;
}
});
并设置EditText属性,如下所示:
android:imeOptions="actionDone"
singleLine="true"
当用户按下从SoftKeyboard完成
时,它将调用WS答案 2 :(得分:1)
尝试维护一个标志,检查丢失焦点代码执行一次然后再也不执行:
viewHolder.etProductQuantity.setTag(1);
viewHolder.etProductQuantity.setOnFocusChangeListener( new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if(!hasFocus && ((Integer)view.getTag())==1){
// Updating the ProductList class's object to set the new quantity
// Updating product quantity on server
Log.d("Product Quantity",
viewHolder.etProductQuantity.getText().toString() + b);
view.setTag(0);
}else{
view.setTag(1);
}
}
});