尝试将信息保存到服务器时,我禁用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()
它用于启用或禁用视图焦点事件。