onOptionsItemSelected ActionBarActivity并不尊重错误的回报

时间:2015-02-21 06:25:20

标签: android menu toolbar

我在ActionBarActivity中有一些代码如下:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            Intent returnIntent = new Intent();
            if (isNameNull()) {
                namePicker.setError(getString(R.string.warning_name_should_not_be_empty));
                Log.d(TAG, "child name is empty");
                return false;
            }
    }
    return super.onOptionsItemSelected(item);
}

此代码只是在EditText中显示错误。我使用FragmentActivty时工作正常。但是当我使用ToolBar切换到ActionBarActivity时,此代码会显示错误并导航回父活动。这可能是ActionBarActivity中的错误。任何解决方法?覆盖onMenuItemSelected(int featureId, MenuItem item)不起作用,因为它已在ActionBarActivity中成为最终版。

1 个答案:

答案 0 :(得分:1)

对于ActionBarActivity,您可以在按下向上按钮时覆盖onSupportNavigateUp()以执行自定义行为,而不是在onOptionsItemSelected()中处理它:

@Override
public boolean onSupportNavigateUp() {
  if (isNameNull()) {
     namePicker.setError(getString(R.string.warning_name_should_not_be_empty));
     Log.d(TAG, "child name is empty");
     return false;
  }
  return super.onSupportNavigateUp();
}

根据Javadoc对该方法的返回值:

  如果向上导航成功完成且此活动已完成,则

返回true,否则为false