Android XML nazewnictwo

Odpowiedz Nowy wątek
2019-10-05 14:01
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 ?


„Standardowa edukacja zapewni Ci przeżycie. Samokształcenie- fortunę." - Jim Rohn
edytowany 1x, ostatnio: Xezolpl, 2019-10-05 14:01

Pozostało 580 znaków

2019-10-05 15:58
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?

Pozostało 580 znaków

2019-10-05 16:02
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"/>


„Standardowa edukacja zapewni Ci przeżycie. Samokształcenie- fortunę." - Jim Rohn

Pozostało 580 znaków

2019-10-05 16:38
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>.

edytowany 1x, ostatnio: Michał Sikora, 2019-10-05 16:39
Aha, i tylko w takich przypadkach, a w innych to już nie ma znaczenia, tak? - Xezolpl 2019-10-05 16:43
A z punktu jakichś tam poprawnie pisanych programów to występuję tam powtarzające się nazewnictwo czy musi być inne wszędzie? - Xezolpl 2019-10-05 16:44
Nie odpowiadaj na temat w komentarzach. To gubi dyskusję. - Michał Sikora 2019-10-05 16:59

Pozostało 580 znaków

2019-10-05 17:04
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?


„Standardowa edukacja zapewni Ci przeżycie. Samokształcenie- fortunę." - Jim Rohn

Pozostało 580 znaków

2019-10-05 17:14

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.

Pozostało 580 znaków

2019-10-05 17:34
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… :)


edytowany 1x, ostatnio: elwis, 2019-10-05 17:34

Pozostało 580 znaków

2019-10-05 21:25
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ć.

Pozostało 580 znaków

2019-10-05 21:44
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);
  }
}
edytowany 3x, ostatnio: Michał Sikora, 2019-10-05 21:52
Jeśli masz na myśli różne layouty np dla różnych orientacji ekranu itd, to tutaj akurat id powinny być takie same, bo to nie mają być 2 różne layouty, tylko różne warianty tego samego - Meini 2019-10-05 23:06
Nie, chodzi mi o sytuację jak powyżej. W tym wypadku jeszcze Lint nas uratuje i powie, że chcemy przypisać TextView do Button. Sytuacja głupia, ale może się zdarzyć np. podczas edycji layoutu. A z orientacjami chodziło mi, że gdyby były różne warianty tego layoutu i w jednym coś by było jednego typu widokiem i w drugim drugiego, to Lint już nie zawsze nas poinformuje, że robimy coś głupiego. Na szczęście teraz takie rzeczy rozwiązuje View Binding. - Michał Sikora 2019-10-05 23:22
Yhy, taki okrojony DataBinding? Nigdy nie używałem, ale zamysł jest dobry dla tych, którzy nie używają DataBinding - Meini 2019-10-06 15:27
No można to tak nazwać. W zasadzie jest to wyekstrahowana część z Data Binding odpowiedzialna za tworzenie klas na postawie layoutu. - Michał Sikora 2019-10-06 15:54

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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