2016-08-19 1 views
0

Schreiben von Boilerplate Code stört mich immer. Eines dieser Dinge in Android ist verbindliche Ansichten:Bind Ansichten automatisch nach Name

TextView email; 
TextView password; 
//... 

private bindViews() { 
    email = (TextView) findViewById(R.id.email); 
    password = (TextView) findViewById(R.id.password); 
    //... 
} 

Welche ich denke, könnte besser gemacht werden.

Kürzlich fand ich heraus über ButterKnife Bibliothek und ich liebte es. Es macht Code weniger:

@BindView(R.id.email) TextView email; 
@BindView(R.id.password) TextView password; 
//... 

ButterKnife.bind(this); 

Aber die Sache ist, dass wir normalerweise benennen unsere Ansichten übereinstimmen ihre IDs. Zum Beispiel ist sowohl der Name der XML-ID als auch der Java-Feldname password. (Und auch die Schlangenhülle in Camel-Gehäuse umwandeln). So dachte ich, dass theoretisch die ID Teil auch entfernt werden konnte und der Code in etwa so verkürzt werden:

@BindView TextView email; 
@BindView TextView password; 
//... 

bind(this); 

Gibt es eine solche Lösung? Wenn nicht, wäre es nützlich und praktikabel? Weil ich es gerne erstellen würde, wenn nicht.

Antwort

1

Meiner Kenntnis nach gibt es nichts dergleichen. Aber ButterKnife wird aktiv bearbeitet und hat eine ziemlich große Fangemeinde. Ich würde persönlich nicht davon abweichen, nur um meinen Code etwas weniger ausführlich zu machen.

Es wäre immer noch eine ziemlich coole Übung, denke ich. Könnte ButterKnife abzweigen und versuchen, diese Funktion zusammenzuführen. Es wäre eine ziemlich große Leistung, zu einer von Jake Whartons Bibliotheken beizutragen.

Für das, was das wert ist, möchten Sie vielleicht LoganSquare. Es ist ein JSON-Parser, der im Prinzip dasselbe tut, was Sie mit Anmerkungen beschreiben. Es ist auch sehr schnell. Hier ist ein Beispiel für die Verwendung:

@JsonObject 
public class User{ 
    // Will infer JSON key based off variable's name 
    @JsonField 
    public String name; 

    // Can specify a key's name too if you want like this 
    @JsonField(name="date_of_birth") 
    public long dateOfBirth; 

    // LoganSquare requires a default constructor like this 
    public User(){} 
} 
+0

Hmmm, gut zu wissen. Der JSon-Parser ist auch cool, danke fürs Teilen. – Mousa

Verwandte Themen