当试图将信息保存到服务器时,我禁用了 EditTexts(很可能用户无法更改信息,但安全总比遗憾好)。

为了防止用户使用 EditText,我可以使用 setEnabled(false)setFocusable(false)。为了再次开始使用 EditText,我调用了 setEnabled(true)setFocusable(true); setFocusableInTouchMode(真)

我猜测使用 setEnabled 会更有效,因为方法调用更少,但情况是否如此(基本上,我想知道哪种方法更有效)?

或者使用其中一种与另一种相比还有其他我不知道的副作用吗?

编辑 - 解决方案

为了防止自己需要setEnable(true/false)到多个不同的Fragments中的多个不同的Views,我实现了以下代码(我的想法来自另一个 StackOverflow answer ):

public static void setViewAndChildrenEnabled(View view, boolean enabled) { 
    view.setEnabled(enabled); 
 
    if(view instanceof ViewGroup) { 
        ViewGroup viewGroup = (ViewGroup) view; 
        for(int i = 0; i < viewGroup.getChildCount(); i++) { 
            View child = viewGroup.getChildAt(i); 
            setViewAndChildrenEnabled(child, enabled); 
        } 
    } 
} 

我把它放在我的 Utils 包中,这样任何 Activity/Fragment 都可以调用它。它工作得很好。

请您参考如下方法:

In order to prevent the user from using the EditTexts

我建议您使用 setEnable() 而不是 setFocusable() 因为当 EditText 启用与否时您会看到不同,如果您不想看到差异,只需使用 setFocusable(false) 它会保持相同的外观,但您将无法修改该值。

In order to start using the EditTexts again

你可以调用setEnabled(true)(如果你使用了setFocusable(false),你将不得不使用setFocusable(true)

让我们说点什么:setFocusable() 它用于启用或禁用 View 焦点事件。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!