2014-06-05 10 views
8

Powrót w dzień Studio MotoDev (oparte na Eclipse, wydane przez Motorolla) miało funkcję wyodrębniania odniesień z pliku XML do kodu. Standard Eclipse z ADT nie miał tej funkcji, ale zastanawiał się, czy jest to możliwe w Android Studio.Czy Android Studio może automatycznie wydobywać odwołania z pliku XML układu do pliku java działania?

Tak na przykład podano XML:

<Button 
    android:id="@+id/my_button"> 

To będzie generować w klasie swoją aktywność w:

private Button mMyButton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ... 
    mMyButton = (Button) findViewById(R.id.my_button); 
} 

Odpowiedz

0

Można sprawdzić butterknife. Nie robi dokładnie tego, co chcesz, ale pozbywa się wielu płyt kotła. Rozwiązanie @zigi wydaje się importować wszystko, co w realnym świecie nie jest świetne!

4

Odpowiedź brzmi "tak", zaczynając od Marshmallow i wracając do Gingerbread z biblioteką kompatybilności, Android ma teraz data binding. Nie wyodrębnia odniesień jako takich, ale robi to, co chcesz.

Więc teraz zamiast

<LinearLayout …> 
    <TextView android:id="@+id/name"/> 
    <TextView android:id="@+id/lastName"/> 
</LinearLayout> 

Mamy

<LinearLayout …> 
    <TextView android:text="@{user.name}"/> 
    <TextView android:text="@{user.lastName}"/> 
</LinearLayout> 

A zamiast tego kodu Java z obcego kotła kodu płyty

private TextView mName 
protected void onCreate(Bundle savedInstanceState) { 
    setContentView(R.layout.activity_main); 
    mName = (TextView) findViewById(R.id.name); 
    mLastName = (TextView) findViewById(R.id.lastName); 
} 
public void updateUI(User user) { 
    if (user == null) { 
    mName.setText(null); 
    mLastName.setText(null); 
    } else { 
    mName.setText(user.getName()); 
    mLastName.setText(user.getLastName()); 
    } 
} 

teraz mamy (która idzie krok powyżej wartości Butterknife w ramach metody updateUI)

private ActivityMainBinding mBinding; 
protected void onCreate(Bundle savedInstanceState) { 
    mBinding = DataBindingUtil.setContentView(this, 
          R.layout.activity_main); 
} 

public void updateUI(User user) { 
    mBinding.setUser(user); 
} 

Udoskonalenia wykraczają poza to, więc proponuję przejrzenie następującego presentation podanego przez inżynierów Google, George'a Mount'a i Yigita Boyara.

Warto zainwestować w to. Wszystko to odbywa się w czasie kompilacji, więc nie ma ponoszonej kary w czasie wykonywania. I jak powiedziałem na początku, jest kompatybilny wstecz do Androida 2.3, więc naprawdę nie ma powodu, aby nie używać tej nowej funkcji.

7

Istnieje wtyczka do Studio Android o nazwie ButterKnifeZelezny, która udostępnia żądaną funkcję, ale tylko wtedy, gdy używasz ButterKnife. Możesz wybrać, co chcesz zaimportować i tak dalej.

ButterKnifeZelezny

+0

Szkoda, że ​​obecnie nie jest kompatybilny z AS 2.2.2 –

+0

swoje dobre, ale zbyt wiele za dużo kodu mylące na górze metody onCreate po 40 -50 pola są tam –

+0

@VishalPatel Jeśli chcesz uzyskać dostęp do wszystkich z tych pól nie masz innego wyjścia. – skywall

Powiązane problemy