2016-01-04 17 views
7

non mi è chiaro come utilizzare @Intdef quando si effettua una bandiera come questo:Android @Intdef per bandiere come usarlo

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

questo esempio è direttamente dalla docs. Cosa significa in realtà? significa che inizialmente tutti sono impostati su true? se faccio un "o" su quanto segue:

NAVIGATION_MODE_STANDARD | NAVIGATION_MODE_LIST 

cosa significa ... im un po 'confuso che cosa sta accadendo qui.

risposta

12

Impostare il flag di @IntDef, quindi è possibile utilizzare le operazioni bit per combinare questi flag int (come |, & ...).

Fox esempio:

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) { 
    ... 
} 

Usa setIntDefFalg con '|'

setIntDefFlag(DisplayOptions.DISPLAY_OP1|DisplayOptions.DISPLAY_OP2);