Instantiating an inner class (Preference) in xml file

十年热恋 提交于 2019-12-06 21:19:12

问题


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?


回答1:


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.



来源:https://stackoverflow.com/questions/7249028/instantiating-an-inner-class-preference-in-xml-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!