繁体   English   中英

使用drawable解析本地xml android

[英]Parsing local xml android with drawable

我想从android中的assets文件夹解析一个本地XML文件,我找到了一个很好的教程: http//theopentutorials.com/tutorials/android/xml/android-simple-xmlpullparser-tutorial/

一切都很好,我已经转换了教程代码,以获得一个很好的列表视图,其中包含每个行项目的图像,标题和描述,但是有一个大问题:

如何在本地XML文件中解析可绘制图像以获取图像? 所有图像都存储在drawable文件夹中。

示例XML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<cities>
    <city>
        <cid>1</cid>
        <name>Passau</name>
        <image>@drawable/passau</image>
        <desc>Lorem ipsum</desc>
    </city>
    <city>
        <cid>2</cid>
        <name>Bamberg</name>
        <image>@drawable/bamberg</image>
        <desc>Lorem ipsum</desc>
    </city>
    <city>
        <cid>3</cid>
        <name>Augsburg</name>
        <image>@drawable/augsburg</image>
        <desc>Lorem ipsum</desc>
    </city>
</cities>

适配器示例:

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

/**
 * Created by Ben on 29.07.2014.
 */
public class ListViewAdapter extends ArrayAdapter<RowItem> {
    Context context;

    public ListViewAdapter(Context context, int resourceId,
                               List<RowItem> items) {
        super(context, resourceId, items);
        this.context = context;
    }

    /*private view holder class*/
    private class ViewHolder {
        ImageView imageView;
        TextView txtTitle;
        TextView txtDesc;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        RowItem rowItem = getItem(position);

        LayoutInflater mInflater = (LayoutInflater) context
                .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.row_item, null);
            holder = new ViewHolder();
            holder.txtDesc = (TextView) convertView.findViewById(R.id.Desc);
            holder.txtTitle = (TextView) convertView.findViewById(R.id.Titel);
            holder.imageView = (ImageView) convertView.findViewById(R.id.Bild);
            convertView.setTag(holder);
        } else
            holder = (ViewHolder) convertView.getTag();

        holder.txtDesc.setText(rowItem.getDesc());
        holder.txtTitle.setText(rowItem.getTitle());
        holder.imageView.setImageResource(rowItem.getImageDrawable());

        return convertView;
    }
}

将资源的名称添加到xml中并尝试: 如果我知道它的名称,如何获取图像的资源ID? 从您从xml获取的资源名称获取资源ID。 就这样。

基于他的适配器,这里是改变的行:

holder.imageView.setImageResource(getContext().getResources().getIdentifier(rowItem.getImage(), "drawable", getContext().getPackageName()));

当您查找时: http//developer.android.com/reference/android/widget/ArrayAdapter.html它获取上下文工作并提供方法“getContext”,您可以访问getResources()。

您的RowItem已经保存了具有图像名称的字符串。 您必须删除xml中的“@ drawable /”前缀。

在这里,我将考虑您已经将城市作为集合类。 您可以通过收集图像标记来执行此操作,如下所示。

 else if (tagname.equalsIgnoreCase("image")) {
                    city.setImageDrawable(text);

因此,city对象将具有来自XML标记的此图像值。 在适配器中膨胀视图时,只需从city对象获取此值并将其设置为imageview,如 -

获取在城市对象中设置的图像可绘制值,如 -

Drawable imageDrawable = city.getImageDrawablwe();

在适配器getView方法中将图像设置为图像视图。

setBackgroundResource(imageDrawable);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM