Android:如果EditText有错误,则禁用菜单项

时间:2015-06-24 17:13:04

标签: android validation

我在onCreate()方法中使用此代码验证活动的EditText:

final EditText editName = (EditText) findViewById(R.id.titleNameTextView);
editName.addTextChangedListener(
        new TextWatcher() {
            @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
            @Override public void onTextChanged(CharSequence s, int start, int before, int count) {}
            @Override public void afterTextChanged(Editable s) {
                if(editName.getText().toString().length() < 3){
                    editName.setError("Error Text");
                }
            }
        }
    );

所以,如果我这样做:

Log.d("error", editName.getError().toString());

我收到了消息。

现在我想启用/禁用菜单项,具体取决于此editText是否有错误。我发现我可以用以下方法修改按钮的可用性:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_people_edit, menu);
    menu.findItem(R.id.action_save).setEnabled(false);
    return true;
}

问题是我在设置错误消息时无法禁用该按钮,因为我必须在onCreateOptionsMenu中修改它,并且验证是从onCreate方法进行的。

编辑:我添加了以下代码,但它无法正常工作

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    EditText name = (EditText) findViewById(R.id.titleNameTextView);
    if(name.getText().toString().length() < 3){
        menu.getItem(0).setEnabled(false);
    }
    return super.onPrepareOptionsMenu(menu);
}

3 个答案:

答案 0 :(得分:2)

您必须致电invalidateOptionsMenu(),或向后兼容的版本。它会调用onCreateOptionsMenu。在那里,你可以检查你的状况,并做你需要的任何事情。

答案 1 :(得分:1)

在运行时更改菜单项

  

创建活动后,onCreateOptionsMenu()方法就是   如上所述,只召唤一次。系统保留并重新使用   您在此方法中定义的菜单,直到您的活动被销毁。如果   您想在首次创建后随时更改选项菜单,   你必须覆盖onPrepareOptionsMenu()方法。这传递给你   当前存在的Menu对象。如果你愿意,这很有用   删除,添加,禁用或启用菜单项取决于当前   申请状态。

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        menu.getItem(0).setEnabled(false); 
       return super.onPrepareOptionsMenu(menu);
    }

答案 2 :(得分:0)

感谢一些答案,我是下一步做的

1-我添加了这个方法:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    EditText name = (EditText) findViewById(R.id.titleNameTextView);
    if(name.getText().toString().length() < 3){
        menu.getItem(0).setEnabled(false);
    }
    return super.onPrepareOptionsMenu(menu);
}

2-当我设置错误时,我也会调用:

invalidateOptionsMenu()