Я бы добавил к этому одну вещь и причину, по которой она не работала для меня.
Это похоже на ответ Напстера.
Убедитесь, что активность вашего фрагмента распространяется на AppCompatActivity
, а не FragmentActivity
!
public class MainActivity extends AppCompatActivity {
}
Из справочной документации Google Документация для FragmentActivity:
Примечание. Если вы хотите реализовать действие, которое включает в себя панель действий, вам следует вместо этого использовать класс ActionBarActivity, который является подклассом этого, поэтому позволяет использовать Fragment API на уровне API 7 и выше.
Чтобы обновить ответ Напстера - теперь ActionBarActivity
устарело, вместо этого используйте AppCompatActivity
.
При использовании AppCompatActivity
также убедитесь, что вы установили «тему активности на Theme.AppCompat
или аналогичную тему» (Google Doc).
Примечание: android.support.v7.app.AppCompatActivity
является подклассом класса android.support.v4.app.FragmentActivity
(см. AppCompatActivity ref doc).
Вы думаете об отменяемых событиях? Платформа широко использует это.
Создайте класс EventArgs
, который имеет свойство Cancel
, которое реализует получение / установку. Затем обработчик событий может установить для свойства Cancel
значение true
, которое вы можете проверить, когда вызов вернется.
public bool TrySomething()
{
CancelEventArgs e = new CancelEventArgs();
if (Event1 != null) Event1.Invoke(e);
if (e.Cancel == false)
{
if (Event2 != null) Event2.Invoke(e);
}
}
Взгляните на классы CancelEventHandler и CancelEventArgs . Они следуют шаблону, в котором каждый обработчик событий может отменить событие.