2014-10-01 3 views
10

Ich versuche, die Sichtbarkeit für eine Schaltfläche wie folgt festzulegen:Nicht in der Lage, die setVisibility dynamisch einstellen() Parameter

public Bundle setActivityState(Bundle bundle){ 
    startBtn = (Button) findViewById(R.id.startSensorsBtn); 

    startBtn.setVisibility(
      getVisibilityState(bundle, PersistanceConstants.START_BTN_STATE) 
    );   

    return bundle; 
} 

public int getVisibilityState(Bundle bundle, String keyName){ 
    if (bundle.getInt(keyName) == View.VISIBLE){ 
     return View.VISIBLE; 
    } else if (bundle.getInt(keyName) == View.INVISIBLE){ 
     return View.INVISIBLE; 
    } else if (bundle.getInt(keyName) == View.GONE){ 
     return View.GONE; 
    } 

    return 0; 
} 

Aber ich erhalte die Fehlermeldung:

Must be one of: View.VISIBLE, View.INVISIBLE, View.GONE less... (Ctrl+F1) 
Reports two types of problems: 
- Supplying the wrong type of resource identifier. For example, when calling Resources.getString(int id), you should be passing R.string.something, not R.drawable.something. 
- Passing the wrong constant to a method which expects one of a specific set of constants. For example, when calling View#setLayoutDirection, the parameter must be android.view.View.LAYOUT_DIRECTION_LTR or android.view.View.LAYOUT_DIRECTION_RTL. 

während

Aufruf
getVisibilityState(bundle, PersistanceConstants.START_BTN_STATE) 

Ich weiß nicht, wie ich das umgehen soll. Ich verstehe, dass es eine bestimmte Menge von Werten erwartet, aber alles, was ich weiß, ist ein int zu übergeben. Was kann hier gemacht werden?

+0

poste dein Fehlerprotokoll .. – Sats

+0

getVisibilityState erreichen die Zeile 'return 0;'? Bitte posten Sie Ihr Fehlerprotokoll. – wendigo

+0

Sorry, ich habe das nicht erwähnt. Ich bekomme das während der Kompilierzeit im Android Studio. – jsbisht

Antwort

18

Wenn Sie wissen, was Sie tun, können Sie diese Android Studio Inspektion unterdrücken lokal mit

//noinspection ResourceType 

Zum Beispiel

//noinspection ResourceType 
startBtn.setVisibility(bundle.getInt(PersistanceConstants.START_BTN_STATE)); 
+1

Wow. Das hat funktioniert. Vielen Dank laalto. – jsbisht

17

Ein bisschen spät, um die Partei, sondern eine andere Lösung, wenn Sie Verwenden Sie dies viel in Ihrem Code und Sie haben eine Methode, die int zurückgibt, ist Ihre eigene Sichtbarkeit Annotation zu definieren, so etwas wie das:

public class MyStuff { 

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

    public @Visibility int getVisibility() { 
     return View.GONE; 
    } 
} 

Wenn Sie dies tun, dann wird sich AS nicht mehr beschweren, weil Sie einen korrekten int def. Zurückgeben.