Android从资源XML填充Listview

时间:2013-10-23 08:43:02

标签: android xml

我想要做的是读取一个xml文件,它有两个值颜色和名称,并显示名称并更改列表中单个项目的背景颜色。有谁知道怎么做?

继承人我的xml

<?xml version="1.0" encoding="utf-8"?>

<resources>
    <string-array name="menu_array">
    <item>
        <name>Page1</name>
        <colour>#ffffff</colour>
    </item> 
    <item>
        <name>Page2</name>
        <colour>#ffffBB</colour>
    </item> 
     <item>
        <name>Page3</name>
        <colour>#fff45f</colour>
    </item> 
    <item>
        <name>Page4</name>
        <colour>#ffff00</colour>
    </item> 
 </string-array> 
</resources>

2 个答案:

答案 0 :(得分:0)

我担心您必须在自定义适配器中解析item值或使用两个不同的数组,一个用于名称,另一个用于颜色

答案 1 :(得分:0)

将您的字符串数组更改为至少如下所示:

    <string-array name="menu_array">

    <item>
      Page1 #ffffff
    </item> 

    <item>
      Page2 #ffffBB
    </item> 

    <item>
     Page3 #fff45f
    </item> 

    <item>
     Page4 #ffff00
    </item> 

    </string-array>

我试图解析你指定的字符串数组,我获得了表单的结果:

   Page1 #ffffff

就我而言,这实际上是无用的,因为你将不得不使用(其中list是实际的字符串数组)分割你的代码:

        String[] cmenu =list[i].split("#");
        item.name=cmenu[0];
        item.colour="#"+cmenu[1];
        menuList.add(item);

或者您可以使用subString方法来执行此操作。但是我无法解析您的排列中的颜色值(总是给我一个NumberFormatException),而我指定的那个似乎可以正常工作:

           int Color.parseColor(String color)

这是我为解决问题而创建的自定义适配器的getView方法的代码:

            @Override
        public View getView(int position, View convertView, ViewGroup parent) {
       View row=convertView;
       TextView textView;
       if(row==null)
      {
        row=inflater.inflate(resourceId, parent, false);
        textView=(TextView)row.findViewById(R.id.text1);
        row.setTag(R.id.text1,textView);
      }
       else
        textView=(TextView)row.getTag(R.id.text1);
        textView.setText(menuList.get(position).name);        
    try{    
        Log.d(TAG, menuList.get(position).colour);                  
        row.setBackgroundColor(Color.parseColor(menuList.get(position).colour));    
       }
       catch(Exception ex)
       {
         Log.e(TAG, "Still does not work");
       }
    return row;
}

注意:item是ColouredMenuItem的一个对象,它只是将String name,colour包装在一个类中。

customAdapter具有构造函数:

     MadAdapter(Context context,List<ColouredMenuItem> list,int resourceId)
{
    this.context=context;
    this.menuList=list;
    this.resourceId=resourceId;
    inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

编辑:您还可以创建一个XML文件,您可以将其添加到资源中,并使用任何可用的解析器对其进行解析。