尝试将信息保存到服务器时,我禁用edittext(可能是用户无法更改信息,但比抱歉更安全)。
为了防止用户使用edittext,我可以使用setEnabled(false)setFocusable(false)。为了再次开始使用edittext,我调用setEnabled(true)setFocusable(true); setFocusableInTouchMode(true)
我猜使用setEnabled会更有效,因为方法调用更少,但是是这样吗(基本上,我想知道哪个方法更有效)?
或者是使用一个对另一个我不知道的副作用?
编辑-解决方案
为了防止自己需要在多个不同的setEnable(true/false)Views到多个不同的Fragments,我实现了以下代码(我从另一个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都可以调用它。它工作得很好。

最佳答案

为了防止用户使用edittext
我建议您使用setEnable()而不是setFocusable(),因为当启用或不启用EditText时,您会看到差异,如果您不想看到差异,只需使用setFocusable(false)它将保持相同的外观,但您将无法修改该值。
为了重新开始使用edittext
您可以调用setEnabled(true)(如果您使用setFocusable(false),则必须使用setFocusable(true)
比如说:setFocusable()它用于启用或禁用视图焦点事件。

07-27 17:08