在 xml 文件中实例化内部类(Preference)

发布于 2024-12-02 07:39:24 字数 682 浏览 2 评论 0原文

当您想要访问某个 layout.xml 文件中的自定义视图时,您有两个选择:

  1. 该视图位于它自己的类中。然后你做
  2. 该视图是一个内部类:

现在我想在 中做同样的事情。 第一种方法效果很好,但我想把所有将自定义 Preference 类放在我的 PreferenceActivity 中。我尝试了 (也用 '.' 而不是 '$')以及 ,但都失败了。

有人有想法吗?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别挽留 2024-12-09 07:39:24

在处理 Views 膨胀时,LayoutInflater 会查找“视图” -> “class”情况:

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

Preference 的 PreferenceInflater 没有,所以这适用于“class”情况。

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文