将XML文本转换为许多不同的类

时间:2014-08-28 05:50:39

标签: java android xml

我的问题是将字段中的文本转换为特定的类(用于启动不同的活动)。我的XML文件将扩展为两个不同的类。但是,每个对象都会引用另一个类(这是一个Activity),并且此引用对于 XML 文件中的每个项都是唯一的。因此,它看起来类似于以下内容,虽然具有更多属性:

<Group name="Header 1">
   <DestinationClass>ActivityA.class</DestinationClass>
   <Child name="Child 1">
      <DestinationClass>ActivityA1.class</DestinationClass>
   </Child>
   <Child name="Child 2">
      <DestinationClass>ActivityA2.class</DestinationClass>
   </Child>
</Group>

<Group name="Header 2">
   <DestinationClass>ActivityB.class</DestinationClass>
   <Child name="Child 1">
      <DestinationClass>ActivityB1.class</DestinationClass>
   </Child>
</Group>

最后,我试图以某种方式模仿 AndroidManifest.xml 文件。此XML文件将被解析,然后最终在我的导航抽屉上变成 ExpandableListView 。最终,我试图避免对菜单的每个细节进行编码,而宁愿将其全部放在一个地方。这些类看起来类似于以下内容:

public class NavListGroup {
    // Id for this group, for later matching
    private int mGroupId;

    // The displayed name of this Group
    private String mGroupName;

        // As needed for now, only launches an activity
    // Determines the destination
    private Class mActivityDestination;

    // Easily determines if the group has children under it
    private boolean mHasChildren = false;

    // Holds all the children items that belongs under this group
    private List<NavListChild> mChildrenList;

}


public class NavListChild {
    // Id for this child item, for later matching
    private int mChildId;

    // The displayed name of this child item
    private String mChildName;

        // As needed for now, only launches an activity
    // Determines the destination
    private Class mActivityDestination;
}

(如果我最后还需要它,XML也会保存ID)

需要成员类变量的原因是,一旦点击了组或子项,就会启动一个意图 - 但是,每个项目都有不同的活动/类。我可以使用一个主列表[通过ID匹配到第二个列表中直接编码的类],但这样做与首先制作XML文件的目的背道而驰。

我已经尝试到处搜索答案 - 它并不是真正序列化对象(虽然我猜它被认为是反序列化 XML到两个对象,在这种情况下),但它更像是一个问题将文本转换为类似于AndroidManifest xml文件中的类,其中定义了一个Activity。我也找不到解析AndroidManifest文件的代码,因此没有引导。

1 个答案:

答案 0 :(得分:0)

作为替代方案,您可以以iosched Google为例。他们创建了BaseActivity来处理常见功能,例如NavigationDrawer

关于XML over coding问题。例如,您可以利用XML资源(例如字符串数组)。您的ExpandableListView将使用Adapter来加载来自该字符串数组的数据或定义列表项名称和目标的多个数组。我的意思是,加载整个自定义XML文件,使用可以从代码轻松访问的内置resource ecosystem

此外,我会理解这个XML是否稍后会由对Android编码一无所知的人进行扩展。但是你把那些类定义为目的地,对吧?如果只是你要编辑该文件,那么修改代码也不会那么困难,也可以优雅地维护。

这是我的意见。