微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自定义对象非视图样式?的XML集合

如何解决自定义对象非视图样式?的XML集合

我需要多个对象的多个集合,这些对象包含一个字符串(因为它是本地化的,所以是id),一些数字和一些布尔值。当前,我以静态方式创建它们:

private static final Task[] easyTasks = {
   (new Task(R.string.task_eaa,Task.EASY)),(new Task(R.string.task_eab,Task.EASY).setMinCount(4)),(new OtherTask(R.string.task_eac,...
}
private static final Task[] mediumTasks = {
   (new Task(R.string.task_maa,Task.MEDIUM)),(new Task(R.string.task_mab,Task.MEDIUM).setSwappable(true)),(new Task(R.string.task_mac,(new Task(R.string.task_mad,Task.MEDIUM).setSwappable(true).setScale(3).setMinCount(3)),...
}

这很烦人且难以维护,因为将来我会添加更多任务。我想到了一种更灵活,更优雅的方法来执行此操作:我想在一个xml文件中创建所有这些任务。

我在Google上搜索了一些如何在xml中创建类结构的方法,然后发现了这种方式:

<declare-styleable name="TaskStylable">
    <attr name="task_text" format="reference"/>
    <attr name="task_genders">
        <enum name="doesnt_matter" value="0"/>
        <enum name="requires_female" value="1"/>
        <enum name="requires_male" value="2"/>
        <enum name="requires_both" value="3"/>
    </attr>
    <attr name="task_mincount" format="integer"/>
    <attr name="task_swappable" format="boolean"/>
    <attr name="task_scale" format="float"/>
</declare-styleable>

我希望能够像这样创建所有任务:

<array name="easyTasks">
    <Task
        task_text="@string/task_eaa"/>
    <Task
        task_text="@string/task_eab"
        task_mincount="4"/>
    <!-- OtherTask Could just be a Task with this way of initialization -->
    <Task
        task_text="@string/task_eac"/>
    ...
</array>

<array name="mediumTasks">
    <Task
        task_text="@string/task_maa"/>
    <Task
        task_text="@string/task_mab"
        task_swappable="true"/>
    <Task
        task_text="@string/task_mac"/>
    <Task
        task_text="@string/task_mac"
        task_swappable="true"
        task_scale="3"
        task_min_count="3"/>
    ...
</array>

不幸的是,我无法使它正常工作,而且看起来似乎没有这么优雅。
那我该怎么做呢?甚至没有正确的方法可以在xml中实现类似枚举的对象列表?

(当然,我需要以某种方式解析Java中的该数组。我已经设法解析了一个字符串数组数组,但是我不知道如何解析此自定义样式。但这是解决此问题之后的另一个问题)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。