android - 在xml文件中实例化一个内部类(Preference)

标签 android inner-classes android-xml preference preferencescreen

当你想访问一些自定义 View 时 layout.xml文件,你有两个选择:

  1. View 在它自己的类中。然后你做<package.name.MyView android:layout_width= ... />
  2. View 是内部类:<view class="package.name.OuterClass$MyView" android:layout_width= ... />

现在我想在 <PreferenceScreen> 中做同样的事情. 第一种方法效果很好,但我想把所有的自定义 Preference在我的 PreferenceActivity 中一起上课。我试过 <Preference class="package.name.OuterClass$MyPreference" ... /> (也用 '.' 而不是 '$')以及 <package.name.OuterClass.MyPreference ... /> ,但都失败了。

有没有人有想法?

最佳答案

当处理 Views 膨胀时,LayoutInflater 寻找“ View ”->“类”的情况:

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

Preference 的 PreferenceInflater 没有,所以这是针对“类”的情况。

它在其 createItem() 方法中使用了反射,这可能就是第一种情况适合您的原因。

关于android - 在xml文件中实例化一个内部类(Preference),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7249028/

相关文章:

android - 如何在另一个 View 后面膨胀 View

java - 将常规 Int 转换为最终 Java

c++ - 如何从 C++ 内部类引用封闭实例?

c++ - operator[] 重载的内部类不起作用

android - 我想让我的应用程序只在android中的横向

java - 如何: When application updates,自动清除以前应用程序的数据

java - 在Android中将语音录制为mp3

Android Studio Gradle : Error:Execution failed for task ':app:processDebugGoogleServices' . > 找不到与包匹配的客户端

android - 如何使用自定义行为设置折叠工具栏的背景以适合整个屏幕

android - 第二个布局在 android studio 中没有显示包含标签