自定义ListAdapter由EditText组成,失去焦点,调用两次

时间:2014-11-24 08:24:13

标签: android android-listview android-edittext listener

我正在制作一个电子商务应用,其购物车列表包含ListView个自定义EditTextEditText代表商品数量。我正在使用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);
        }
    }
});

因此,编码正在执行两次,这就产生了问题。

3 个答案:

答案 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);
                }
            }
        });