2015-06-17 13 views
7

Ich schrieb eine Funktion, die eine Sichtbarkeit zurückkehrt - aber ich bekomme richtig:Funktion, die Sichtbarkeit liefert

Must be one of: View.VISIBLE, View.INVISIBLE, View.GONE less...

für diesen Code:

private int getVisibilityForGlobalAndLocal(final boolean global, final boolean local) { 
    if (global) { 
     return View.GONE; 
    }     
    return local ? View.VISIBLE : View.INVISIBLE; 
} 

wenn wie folgt aus:

view.setVisibility(getVisibilityForGlobalAndLocal(true,false)); 

Leider @ Visibility Annotation ist in Sicht versteckt:

/** @hide */ 
@IntDef({VISIBLE, INVISIBLE, GONE}) 
@Retention(RetentionPolicy.SOURCE) 
public @interface Visibility {} 

Jetzt kann ich nur diesen Teil kopieren (funktioniert), aber es fühlt sich schlecht an. Gibt es eine elegantere Lösung, die mir hier fehlt? Soll ich das als Bug ablegen?

+1

Können Sie ein wenig klarer sein, zu unterdrücken, was los ist und wo Sie bekomme einen Fehler? Du Code sieht für mich vollkommen legal aus. Wie für eine Visibility-Schnittstelle gibt es so etwas nicht. Die 3 Sichtbarkeiten sind Konstanten und werden im gesamten Framework als Ints behandelt. –

+0

Hinzugefügt Detail – ligi

+0

ist das ein Flusenfehler? – njzk2

Antwort

5

Es wäre auf jeden Fall schön, die @ Visibility-Annotation verwenden zu können, aber es sieht so aus, als ob wir es im Moment nicht können.

In der Zwischenzeit können Sie die @SuppressWarnings hinzufügen („Quellentyp“) Anmerkung über das Verfahren, in dem Sie setVisibility rufen Sie die Flusen Fehler

@SuppressWarnings("ResourceType") 
public void myMethod() 
{ 
    view.setVisibility(getVisibilityForGlobalAndLocal(true,false)); 
} 
+0

danke - upvoted - aber ich hasse es wirklich zu deaktivieren - ich denke, ich bevorzuge dann kopieren die Anmerkung – ligi

+0

Eine seltsame Sache, die ich gesehen habe. Ich habe meine eigene Visibility Annotation erstellt, die genau wie in android.view.View ist, aber Lint schlägt fehl mit: Fehler: Muss einer der folgenden sein: 0, 4, 8 [WrongConstant] .setCenterTextVisibility (View.INVISIBLE); –

+2

Wenn Sie dies in einer größeren Methode verwenden möchten, die mehr Zeug macht, können Sie den Kommentar '// noinspection ResourceType 'direkt über der Zeile hinzufügen, in der' view.setVisibility (getVisibilityForGlobalAndLocal (true, false)); '. Auf diese Weise unterdrücken Sie die Warnung für die gesamte Methode nicht :) –

Verwandte Themen