Nie działa bo dispaly jest nadpisywany. Przepływ wygląda mniej więcej tak: Wejście w blok try, jeśli wystąpi dzielenie przez 0 to ustaw display na "Error", wstaw do display zawartość ans. Pole display jest za każdym razem wypełniane zawartością ans. Sformatuj lepiej kod a będziesz widział wyraźnie, że display wypełniane jest bez względu na to czy wyjątek był czy nie.
case 4: // Dzielenie
ans = 0f;
try {
ans = data / secondOperand;
}
catch(ArithmeticException e) {
display.setText("Error");
}
display.setText(String.valueOf(ans));
break;