Android:将资源ID作为int传递

时间:2010-10-19 18:30:36

标签: android xml resources

所以我正在编写一个Android应用程序,我有一个xml解析器类来解析我的xml文件并为我构建一个树

我想重用我的xml解析器代码用于不同的xml文件

但是,遇到getXml(resourceID)无法正常工作的问题:

public class myactivity extends Activity {

  public void someMethod()  {

    Xmlparser myparser = new Xmlparser();
    myparser.parseXML(this.context, R.xml.somedata);

  }

  public void someOtherMethod(){

    Xmlparser adifferentparser = new Xmlparser();
    adifferentparser.parseXML(this.context, R.xml.differentdata);

  }

}

public class Xmlparser{

import java.io.IOException;
import java.util.Vector;

import org.xmlpull.v1.XmlPullParserException;

import android.content.Context;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;

private XmlResourceParser xrp;

  public String parseXML(Context cont, int resourceID){
    xrp = cont.getResources().getXml(resourceID);
  //xrp = cont.getResources().getXml(R.xml.differentdata); // this works, but isn't any good for code reuse!
  }

}

当我使用资源ID对其进行硬编码时,它可以工作(例如getXml(R.xml.differentdata)),但是当我将资源ID作为int传递给类中我知道xml文件的方法时我想使用(如上面的代码片段)

我可以在activity类中创建XmlResourceParser对象,获取xml文件,然后将该XmlResourceParser对象传递给我的Xmlparser,但这样就解决了错误的问题,即如何传递资源ID

1 个答案:

答案 0 :(得分:0)

public class XMLParser {
    private Resources _resources;

    public XMLParser(Resources resources){
        this._resources = resources;
    }

    public void parse(int resID) {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        try {
            SAXParser parser = factory.newSAXParser();
            CardListHandler handler = new CardListHandler();
            parser.parse(this._resources.openRawResource(resID), handler);


        } catch (Exception e) {
            throw new RuntimeException(e);
        } 
    }

}