XML解析器到VIewPagerAdapter

时间:2016-05-18 05:07:38

标签: android xml xml-parsing android-viewpager

我正在尝试将XML文件解析到我的应用程序的应用程序。基本上,我的小应用程序正在尝试将图像从XML文件加载到ViewPagerAdapter。所以,我需要帮助学习教程或示例代码。 XML文件看起来像这样;

<Items

  <Item>
    <src>http://mysite/data/cool-pictures/Cool-pictures-1.jpg</src>
    <Name>Picture 1</Name>
  </Item>
  <Item>
    <Src>http://mysite/data/cool-pictures/Cool-pictures-10.jpg</Src>
    <Name>Picture 2</Name>
  </Item>
  <Item>
    <Src>http://mysite/data/cool-pictures/Cool-pictures-11.jpg</Src>
    <Name>Picture 3</Name>
  </Item>
  <Item>
    <Src>http://mysite/data/cool-pictures/Cool-pictures-12.jpg</Src>
    <Name>Picture 4</Name>
  </Item>

</Items>

我该怎么办呢。 另外,这是适配器类的代码。

public class ViewpagerAdapter extends PagerAdapter {
    Context context;
    String[] carName;
    int[] carImage;
    LayoutInflater inflater;

    public ViewpagerAdapter(MainActivity mainActivity, String[] carName, int[] carImage) {
    this.context = mainActivity;
    this.carName=carName;
    this.carImage = carImage;
    }

@Override
public int getCount() {
    return carImage.length;
}

 @Override
public boolean isViewFromObject(View view, Object object) {
    return view == object;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
   container.removeView((View) object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {

    TextView carText;
    ImageView carView;

    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View itemView = inflater.inflate(R.layout.content_main, container,false);
    carText = (TextView) itemView.findViewById(R.id.car_text);
    carView = (ImageView) itemView.findViewById(R.id.car_image);

    carText.setText(carName[position]);
    carView.setImageResource(carImage[position]);

    container.addView(itemView);

    return itemView;
}
}

2 个答案:

答案 0 :(得分:0)

参考here

这将帮助您获得问题的答案。

答案 1 :(得分:0)

最后,我得到了问题的答案。我所做的是有一个类来处理我的XML。代码如下。

 public List<ItemModel> parse(InputStream is){
    XmlPullParserFactory pullParserFactory;
    try {
        pullParserFactory = XmlPullParserFactory.newInstance();
        XmlPullParser parser = pullParserFactory.newPullParser();
        parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
        parser.setInput(is, null);
        parseXMl(parser);
    }catch (XmlPullParserException e) {
        e.printStackTrace();
    }
    System.out.print("-----Parse" + myItems);
    return myItems;
}

private void parseXMl(XmlPullParser parser) {
    int event;
    try {
        event = parser.getEventType();
        while (event != XmlPullParser.END_DOCUMENT){
            String name = parser.getName();
            switch (event){
                case XmlPullParser.START_TAG:
                    if (name.equalsIgnoreCase("Item")){
                        myItem = new ItemModel();
                    }
                    break;
                case XmlPullParser.TEXT:
                    text = parser.getText();
                    break;
                case XmlPullParser.END_TAG:
                    if (name.equals("Item")){
                        myItems.add(myItem);
                    }else if (name.equals("Name")){
                        myItem.setName(text);
                    }else if (name.equals("Src")){
                        myItem.setSource(text);
                    }
                    break;
                default:
                    break;

            }
            event = parser.next();
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

}

然后在我的MainActivity课上,我打电话给XMlHandler。

XMLHandler handler = new XMLHandler();
List<YourItems> myItems = handler.parse(getAssets().open("items.xml"));

请注意,如果我创建了资产文件夹并将XML文件转储到那里。这就是我能够使用getAssets()的原因。 所以我将myItems传递给了adapter,这对我有用。