10

When you want to access a custom view in some layout.xml file, you have two options:

  1. The view is in it's own class. Then you do <package.name.MyView android:layout_width= ... />
  2. The view is an inner class: <view class="package.name.OuterClass$MyView" android:layout_width= ... />

Now I want to do the same thing inside a <PreferenceScreen>. The first way works well, but I would like to put all the custom Preference classes together in my PreferenceActivity. I tried <Preference class="package.name.OuterClass$MyPreference" ... /> (also with '.' instead of '$') as well as <package.name.OuterClass.MyPreference ... />, but both failed.

Does anyone have an idea?

animuson
  • 53,861
  • 28
  • 137
  • 147
m1ntf4n
  • 493
  • 2
  • 14

1 Answers1

3

When dealing with Views inflating, LayoutInflater looks for a "view" -> "class" case:

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

Preference's PreferenceInflater doesn't, so that is for the "class" case.

It uses reflection in its createItem() method and that's probably why the first case works for you.

avimak
  • 1,628
  • 11
  • 18