Android XML nazewnictwo

0

Witam, dochodzę do pewnego problemu i nie wiem czy ma on jakieś znaczenie bo kod działa tak czy tak ale do rzeczy - piszę taką małą aplikację biblioteczkę, dla nauki i poćwiczenia androida i dochodzę do tego że mam kilka plików XML w których przeważnie powtarza siębook_title , book_author etc. no i to się powtarza to samo nazewnictwo w kilku plikach, no i niby wszystko działało ładnie, ale ogarnąłem że się tak powtarza (nie było żadnych errorów czy coś) no i poprzemieniałem żeby się tak nie powtarzało na np. opened_book_title , add_book_title etc.

I tutaj moje pytania czy wgl jest to konieczne dla:
a)poprawnego działania programu
b)czystego kodu ?

1

Nie rozumiem o czym piszesz. Czym są te powtarzające elementy? ID widoków? ID stringów? Nazwy plików? Jeszcze czymś innym? Jak wygląda ich użycie?

0
Michał Sikora napisał(a):

Nie rozumiem o czym piszesz. Czym są te powtarzające elementy? ID widoków? ID stringów? Nazwy plików? Jeszcze czymś innym? Jak wygląda ich użycie?

To są nazwy widgetów w ui xml'owym i czy one się mogą tak powtarzać np. w 2 plikach być takie same bez konsekwencji. np. <TextView android:id="@+id/book_title"/>

1

Mogą być konsekwencje w postaci niepoprawnego odtwarzania stanu widoku lub problemów z odnalezieniem widoków, ale to w przypadku używania własnych widoków czy tagów <merge> + <include>.

0
Michał Sikora napisał(a):

Mogą być konsekwencje w postaci niepoprawnego odtwarzania stanu widoku lub problemów z odnalezieniem widoków, ale to w przypadku używania własnych widoków czy tagów <merge> + <include>.

A z punktu jakichś tam poprawnie pisanych programów to występuję tam powtarzające się nazewnictwo czy musi być inne wszędzie?

1

Nie ma raczej reguły. Przede wszystkim jest ważne, żeby ID mówiły czego semantycznie dotyczą w kontekście, w którym są używane i żeby były jednolite w całym projekcie.

0

Nie dostajesz błędów, bo te wartości zwykle są interpretowane w czasie uruchomienia i jeśli już to powodują rzucanie wyjątków. Choć też nie jest powiedziane, że tak będzie. Może wyjątek? Może niezdefiniowane zachowanie? Może zależy… :)

0

Nie wprowadzaj w błąd. Nie będzie nigdy wyjątku, bo findViewById szuka tylko w kontekście zadanego activity. Gdy wywołasz findViewById w nieodpowiednim kontekście, wtedy owszem, dostaniesz wyjątek. Wracając do tematu: uważam, że nie powinny się powtarzać nazwy, to jest zła praktyka. Łatwo się pomylić gdy masz bardzo wiele layoutów, dla których robisz inflate w różnych sytuacjach i np tak jak wyżej napisałem, wywołać coś nie z tego kontekstu, gdy nazwy będą unikalne, nie da się w ten sposób pomylić.

0
Meini napisał(a):

Nie będzie nigdy wyjątku, bo findViewById szuka tylko w kontekście zadanego activity.

Nigdy nie mów nigdy. Lint nie zawsze podpowie, że robimy coś nie tak. Na przykład gdy mamy różne layouty dla różnych konfiguracji. A nawet jak podpowie, to możemy śmiało zignorować, jeśli się uprzemy. Chociaż z drugiej strony to przypisanie rzuca wyjątkiem a nie samo findViewById, więc może i prawda.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity"
    >

  <TextView
      android:id="@+id/foo"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      />

</LinearLayout>
public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(@Nullable Bundle inState) {
    super.onCreate(inState);
    setContentView(R.layout.activity_main);
    Button button = findViewById(R.id.foo);
  }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1