Существует ли стандартный способ реализовать события “Vetoable”?

Я бы добавил к этому одну вещь и причину, по которой она не работала для меня.

Это похоже на ответ Напстера.

  1. Убедитесь, что активность вашего фрагмента распространяется на AppCompatActivity, а не FragmentActivity!

    public class MainActivity extends AppCompatActivity {
    
    }
    

    Из справочной документации Google Документация для FragmentActivity:

    Примечание. Если вы хотите реализовать действие, которое включает в себя панель действий, вам следует вместо этого использовать класс ActionBarActivity, который является подклассом этого, поэтому позволяет использовать Fragment API на уровне API 7 и выше.

  2. Чтобы обновить ответ Напстера - теперь ActionBarActivity устарело, вместо этого используйте AppCompatActivity.

  3. При использовании AppCompatActivity также убедитесь, что вы установили «тему активности на Theme.AppCompat или аналогичную тему» ​​(Google Doc).

Примечание: android.support.v7.app.AppCompatActivity является подклассом класса android.support.v4.app.FragmentActivity (см. AppCompatActivity ref doc).

5
задан Kevin Montrose 23 June 2009 в 23:04
поделиться

2 ответа

Вы думаете об отменяемых событиях? Платформа широко использует это.

Создайте класс 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);
    }
}
6
ответ дан 13 December 2019 в 19:33
поделиться

Взгляните на классы CancelEventHandler и CancelEventArgs . Они следуют шаблону, в котором каждый обработчик событий может отменить событие.

5
ответ дан 13 December 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: