2016-03-14 53 views
9

Próbuję dokonać porównania ciągów z powiązaniem danych XML w Androidzie, ale nie mam odpowiednich wyników.Porównanie łańcuchów na Androidzie Data Binding

Oceniam moje wyrażenie w kodzie, próbuję notice.action == "continue" i jest to fałsz. W wiązaniu danych oczywiście jest to również fałsz.

android:textColor='@{ notice.action == "continue" ? @color/enabledPurple : @color/disabledGray}' 

Sprawdza się tylko wtedy, gdy wykonuję kod notice.action.equals("continue"). To jest zamierzone zachowanie. Mój problem polega na tym, że nie mogę tego osiągnąć za pomocą wyrażeń wiążących dane, ponieważ nie będą one uruchamiać metod takich jak equals. Co mogę zrobić, aby zastąpić wyrażenie porównawcze innym, które działa?

Używam this guide.

Edycja: Myliłem się, metody są dozwolone w XML. Czy to w ten sposób:

android:textColor='@{ notice.action.equals("continue") ? @color/enabledPurple : @color/disabledGray}' 
+1

Dlaczego mówisz, że nie będzie uruchomić metodę taką jak .equals()? Metody są obsługiwane w wyrażeniach wiążących dane. –

+0

Ponownie czytając dokumenty, znalazłem. Sądzę, że przeszedłem przez to. Dziękuję za wskazanie tego, spróbuję w moim kodzie! –

+0

Czy mógłbyś udostępnić kod dla używania equals() w databinding – anoopg87

Odpowiedz

1

spróbuj dodać w xml

<data> <import type="String"/> </data> To może pomóc rozwiązać .equals()

7

Można zrobić na dwa sposoby: - ​​

1. First way inside xml :- 

    android:textColor="@{notice.action.equals(`continue`) ? @color/enabledPurple : @color/disabledGray }" 
  1. Drugi sposób (programowo): -

    wewnątrz xml: -
    aplikacja: setColor = "@ {notice.action}"

wewnątrz działalności lub niestandardową klasę: -

@BindingAdapter("setColor") 
     public static void setTextColor(TextView textView, String s) { 

      Context context = textView.getContext(); 

     textView.setTextColor(s.equals("continue") ? context.getResources().getColor(R.color.enabledPurple) : context.getResources().getColor(R.color.disabledGray)); 
     } 
+0

dzięki za miły ans rozwiązałem mój problem, używając go –

+0

niesamowite. pierwsze rozwiązanie działa w moim przypadku –