2017-10-04 3 views
1

Ich bin wirklich neugierig auf Konstruktoren für benutzerdefinierte Ansichten. Zur Zeit habe ich eine die extends die RelativeLayout. Jede Ansicht benötigt context für die Initialisierung. Also setze ich super() in den Konstruktor. Obwohl ich die activity in meiner Klasse brauche, nahm ich context davon. Soweit ich weiß, activity ist eine context auch warum also Android Studio gibt mir eine Überprüfung, dass ich den Konstruktor mit context vermisse? Meine Klasse sieht wie folgt aus:IDE Warnung in benutzerdefinierten Ansichten in Android

public class CustomView extends RelativeLayout { 

    private Activity activity; 

    public CustomView(Activity activity) { 
     super(activity.getApplicationContext()); 
     this.activity = activity; 
     initialize(activity.getApplicationContext()); 
    } 

    //initialize method 
} 

Dies ist die genaue Nachricht Android Studio gibt mir:

Benutzerdefinierte Ansicht Custom fehlt Konstruktor von Tools verwendet: (Kontext) oder (Context, AttributeSet) oder (Context, AttributeSet, int)

soll ich das ignorieren oder sollte ich in Konstruktor übergeben beide: activity und context?

Danke für alle Informationen!

Antwort

2

Besserer Pass Context statt Activity, weil seine möglichen View mit Context zu nennen, aber ohne Activity. Zum Beispiel, wenn Sie Dialog von Service anrufen.

Auch basierend auf documentation gibt es nur einen Konstruktor ist wirklich notwendig. Aber dieser Konstruktor enthält AttributeSet als Argument.

In Ihrem Fall sollte es sieht aus wie

public CustomView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    this.activity = (Activity) context; //better to hold context actually 
    initialize(context); 
} 

Und sicher gute Praxis ist es, alle verfügbaren Konstrukteure verwenden

Verwandte Themen