Android XML解析

需求介绍

简单的实现主界面上的测试ITEM的显示及其跳转,可以随意配置显示的内容

实现方案

主界面上使用RecycleView显示列表,将每个测试ITEM设Java Bean,其有2个属性,一个是名称,另一个是跳转的class。将需要配置的内容写入xml文件,然后在主界面上解析xml,获取配置得到一个list,然后将此list传到adapter,再在RecycleView上显示即可。

传统上在配置测试ITEM时,流程比较麻烦,需要在主界面上不断添加item view,然后在MainActivity中为其item view添加点击监听事件,然后再在点击事件处添加跳转Intent,很多重复动作,而且配置不方案。

private ListItem mItem;
private final ArrayList<ListItem> mList = new ArrayList<>();

/* 以下XMLReader的这种解析方式也是属于sax解析,
 * 同我们使用SaxParser功能一样。但是这种功能更加的强大.
 */
try {
    Log.i("通知", "开始解析");
    //InputStream inputStream = this.getClassLoader().getResourceAsStream("list_item.xml");
    InputStream inputStream = getAssets().open("list_item.xml");
    SAXParserFactory factory = SAXParserFactory.newInstance();
    SAXParser parser = factory.newSAXParser();
    XMLReader reader = parser.getXMLReader();
    reader.setContentHandler(getRootElement().getContentHandler());
    reader.parse(new InputSource(inputStream));
    Log.i("通知", "解析完毕");
} catch (Exception e) {
    e.printStackTrace();
}

getRootElement()

/**
 * @return 返回设置好处理机制的rootElement
 */
private RootElement getRootElement() {
    /*rootElement代表着根节点,参数为根节点的tagName*/
    RootElement rootElement = new RootElement(ROOT_ELEMENT);
    /*获取一类子节点,并为其设置相应的事件
     * 这里需要注意,虽然我们只设置了一次beauty的事件,但是我们文档中根节点下的所有
     * beauty却都可以触发这个事件。
     * */
    Element beautyElement = rootElement.getChild(ELEMENT);
    // 读到元素开始位置时触发,如读到<beauty>时
    beautyElement.setStartElementListener(new StartElementListener() {
        @Override
        public void start(Attributes attributes) {
            mItem = new ListItem();
        }
    });
    //读到元素结束位置时触发,如读到</beauty>时
    beautyElement.setEndElementListener(new EndElementListener() {
        @Override
        public void end() {
            mList.add(mItem);
        }
    });
    Element nameElement = beautyElement.getChild(ITEM_NAME);
    // 读到文本的末尾时触发,这里的body即为文本的内容部分
    nameElement.setEndTextElementListener(new EndTextElementListener() {
        @Override
        public void end(String body) {
            mItem.setName(body);
        }
    });
    Element ageElement = beautyElement.getChild(ITEM_CLASS_NAME);
    ageElement.setEndTextElementListener(new EndTextElementListener() {
        @Override
        public void end(String body) {
            mItem.setIntent(MainActivity.this, body);
        }
    });
    return rootElement;
}

“list_item.xml”

<?xml version="1.0" encoding="utf-8"?>
<lists>
    <item>
        <name>Service学习</name>
        <class>com.maxxspace.study.ui.StudyService</class>
    </item>
    <item>
        <name>Boradcast学习</name>
        <class>com.maxxspace.study.ui.StudyService</class>
    </item>
</lists>

相关参考
https://blog.csdn.net/xujian197/article/details/79725729

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值