0

这是我的自定义视图代码。我试图防止多次点击此 EditText 但它仍然打开两个 EditStatusActivity 屏幕。为什么?

    setOnClickListener(new OnClickListener() {          
        @Override
        public void onClick(final View v) {
            if(isClicked) {
                return;
            }               
            isClicked = true;
            setEnabled(false);
            setClickable(false);

            final Intent intent = new Intent(activity, EditStatusActivity.class);               
            intent.putExtra(STATUS, currentStatus);
            activity.startActivityForResult(intent, EDIT_STATUS_REQUEST_CODE);

            isClicked = false;
            setEnabled(true);
            setClickable(true);
        }
    });
4

3 回答 3

7

在 onActivityResult 方法上重置您的 isClicked 和 setEnabled

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);         
        isClicked = false;
        setEnabled(true); 
    }

正如pablochan 所写:

startActivityForResult方法是非阻塞的。这意味着,一旦您启动EditStatusActivity,您立即将 isClickable变量设置为 false,这就是您能够进行额外点击的原因。

您不应该isClickable在方法中设置为 true 或将其设置为 true onActivityResult

于 2012-12-19T09:37:24.540 回答
0

我更喜欢另一种选择。

当您处理 Click 事件时,删除侦听器并将其恢复为 onResume。

于 2012-12-19T09:49:03.760 回答
0

startActivityForResult方法是非阻塞的。这意味着一旦您启动 EditStatusActivity,您会立即将isClickable变量设置为false,这就是您能够进行额外点击的原因。

您不应该isClickable在第一次单击后设置为 true,或者在onActivityResult方法中将其设置为 true。

于 2012-12-19T09:42:57.947 回答