【问题标题】:Android SimpleAdapter.ViewBinder is not working while getting data from XML Parsing从 XML Parsing 获取数据时,Android SimpleAdapter.ViewBinder 不起作用
【发布时间】:2014-12-01 09:58:33
【问题描述】:

我的代码如下:

     ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

    String xml = ParseXMLMethods.getXML();
    Document doc = ParseXMLMethods.XMLfromString(xml);

    NodeList children = doc.getElementsByTagName(KEY_ITEM);

    for (int i = 0; i < children.getLength(); i++) 
    {                           
        HashMap<String, String> map = new HashMap<String, String>();    
        Element e = (Element)children.item(i);



        map.put("PID", ParseXMLMethods.getValue(e, KEY_ID));
        map.put("Passionname", ParseXMLMethods.getValue(e, KEY_TITLE));
        map.put("Progress", ParseXMLMethods.getValue(e,KEY_PROGRESS));
        Log.d("Progress",ParseXMLMethods.getValue(e,KEY_PROGRESS));
        map.put("Duedate", ParseXMLMethods.getValue(e, KEY_DUEDATE));
        map.put("Action", ParseXMLMethods.getValue(e, KEY_ACTION));

        mylist.add(map);
    }

    adapter = new SimpleAdapter(getBaseContext(), mylist , R.layout.row, 
            new String[] { KEY_TITLE,KEY_PROGRESS,KEY_DUEDATE,KEY_ACTION}, 
            new int[] {R.id.txt,R.id.progress, R.id.FROM_CELL, R.id.del_btn})
    {

       @Override
        public View getView(int position, View convertView, ViewGroup parent) 
       {

              return itemView;
        }
    };

   adapter.setViewBinder(new MyBinder());
   list.setAdapter(adapter);
   list.setItemsCanFocus(true);

我的 ViewBinder 类如下:

    class MyBinder implements ViewBinder{
    @Override
    public boolean setViewValue(View view, Object data, String textRepresentation) {
        if(view.getId() == R.id.progress){
            String stringval = (String) data;
            int progressValue = Integer.parseInt(stringval);
            ProgressBar progressbar = (ProgressBar) view;
            progressbar.setProgress(progressValue);

            Resources res = getResources();
            Rect bounds = progressbar.getProgressDrawable().getBounds();

            if(progressValue==100)
            {
                progressbar.setProgressDrawable(res.getDrawable(R.drawable.red_progressbar));
            }
            else
            {
                progressbar.setProgressDrawable(res.getDrawable(R.drawable.green_progreesbar));
            }
            progressbar.getProgressDrawable().setBounds(bounds);


            return true;
        }
        return false;
    }
}

每当上面的代码运行时都会出现以下错误:

12-01 04:55:37.162: E/AndroidRuntime(3478): java.lang.NumberFormatException: Invalid int: "50" 12-01 04:55:37.162: E/AndroidRuntime(3478): 在 java.lang.Integer.invalidInt(Integer.java:137) 12-01 04:55:37.162: E/AndroidRuntime(3478): at java.lang.Integer.parse(Integer.java:374)

但此代码在我的进度条使用静态数组时成功运行。请帮助我...

【问题讨论】:

    标签: android listview simpleadapter


    【解决方案1】:

    这里的问题出在下面给出的 XML 文件的数据中 Invalid int: "50"。在我的 xml 文件中,50 之后存在一个空格,这就是我收到错误的原因。我为此问题浪费了 3 小时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-06
      • 2015-12-07
      • 2018-05-31
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      相关资源
      最近更新 更多