2016-01-04 4 views
7

Я не ясно, как использовать @Intdef, когда делает его флаг, как это:Android @Intdef для флагов, как использовать его

@IntDef(
    flag = true 
    value = {NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS}) 

этот пример прямо из docs. Что это значит? означает ли это, что все из них первоначально установлены в true? если я делать «или» на следующем:

NAVIGATION_MODE_STANDARD | NAVIGATION_MODE_LIST 

что это значит ... им немного запутался Что происходит здесь.

ответ

12

Установите флаг @IntDef, затем вы можете использовать битовые операции для объединения этих флагов int (например, |, & ...).

Фокс пример:

public static final int DISPLAY_OP_1 = 1; 
public static final int DISPLAY_OP_2 = 1<<1; 
public static final int DISPLAY_OP_3 = 1<<2; 

@IntDef (
    flag=true, 
    value={ 
      DISPLAY_OP_1, 
      DISPLAY_OP_2, 
      DISPLAY_OP_3 
    } 
) 

@Retention(RetentionPolicy.SOURCE) 
public @interface DisplayOptions{} 

public void setIntDefFlag(@DisplayOptions int ops) { 
    ... 
} 

Использование setIntDefFalg с '|'

setIntDefFlag(DisplayOptions.DISPLAY_OP1|DisplayOptions.DISPLAY_OP2);