9

Jeżeli chcesz uzyskać dostęp do widoku niestandardowego w pewnym layout.xml pliku, masz dwie opcje:instancji klasę wewnętrzną (Preferencje) w pliku xml

  1. wgląd w jego własnej klasie. Następnie należy zrobić <package.name.MyView android:layout_width= ... />
  2. Widok jest wewnętrzna klasa: <view class="package.name.OuterClass$MyView" android:layout_width= ... />

Teraz chcę zrobić to samo wewnątrz <PreferenceScreen>. Pierwszy sposób działa dobrze, ale chciałbym umieścić wszystkie niestandardowe klasy Preference w mojej PreferenceActivity. Próbowałem <Preference class="package.name.OuterClass$MyPreference" ... /> (również z "." Zamiast "$"), jak również <package.name.OuterClass.MyPreference ... />, ale oba nie powiodły się.

Czy ktoś ma pomysł?

+0

Upewnij się, że Twoje wewnętrzne klasy są statyczne. – inazaruk

+0

Wciąż żadna z metod nie działa. Dziwne, że atrybut "klasa" jest całkowicie ignorowany, nawet jeśli zawiera bzdury. – m1ntf4n

Odpowiedz

2

Gdy mamy do czynienia z Views zawyżanie, LayoutInflater wygląda na „Widok” -> „klasa” przypadek:

View createViewFromTag(View parent, String name, AttributeSet attrs) { 
    if (name.equals("view")) { 
     name = attrs.getAttributeValue(null, "class"); 
    } ... 

preferencji użytkownika PreferenceInflater nie, dlatego, że jest na „klasy” sprawy.

Używa refleksji w swojej metodzie createItem() i to pewnie dlatego pierwszy przypadek działa dla Ciebie.

+0

To jest tak denerwujące. – drewbug

Powiązane problemy