У меня есть приложение, которое вылетает на ICS. До этого все работало нормально (, хотя я не уверен, что у меня когда-либо была сотовая платформа для тестирования, все наши тестовые телефоны были либо имбирными пряниками, либо ниже, и теперь у меня есть пара телефонов ICS, с которыми можно поиграть ).
Следующий код (, вызываемый из onResume и OnPreferenceChangeListener )со страницы моих настроек, работал нормально:
protected void setBatteryAlarmSummary(String newValue){
Preference batteryAlarm = (Preference) findPreference( getString(R.string.battery_low_alarm) );
StringBuilder summary = new StringBuilder();
summary.append(getString(R.string.battery_alarm_summary_label));
summary.append(" ");
summary.append(newValue);
summary.append("%");
batteryAlarm.setSummary(summary);
}
Это устанавливает предварительную сводку на «Сигнализация низкого заряда батареи на 10%». Теперь с ICS он вылетает. Не тогда, когда он делает setSummary и не когда страница отображается, а когда вы даже немного прокручиваете настройки, очевидно запуская рендеринг (этот элемент находится примерно на 8 или около того элементов ниже, поэтому он находится «ниже сгиба» на список ). Исправить ICS легко, просто избегайте знака процента:
summary.append("%%");
Однако этот код на имбирном прянике отображает «Сигнал о низком заряде батареи при 10%%»
. Я могу написать, чтобы он менялся в зависимости от версии, но это просто глупо. Действительно ли они нарушили обратную совместимость при рендеринге своих настроек, или это просто фишка Samsung (, которая, к сожалению, сейчас является единственной тестовой платформой для ICS, которая у меня есть )?