将列表转换为对象

时间:2012-11-29 15:14:12

标签: android

我正在尝试为我的活动添加适配器,以便显示动物列表。

我收到此错误:

11-24 12:08:20.918: E/AndroidRuntime(6394): java.lang.ClassCastException: com.myapp.animals.Animal cannot be cast to java.util.Map
 package com.myapp.animals;

    import java.util.List;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;


public class SlachtList extends Activity {
    static final String[] FROM = {AnimalData.C_BATCHNR, AnimalData.C_VOLGNUMMER};
    static final int[] TO = {android.R.id.text1,android.R.id.text2 };

    ListView list;
    List animals;
    SimpleAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_slacht_list);

        list = (ListView) findViewById(R.id.list);
        animals = ((AnimalApp) getApplication()).animalData.getAnimals();

        adapter = new SimpleAdapter(this, animals, android.R.layout.two_line_list_item, FROM, TO);
        list.setAdapter(adapter);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_slacht_list, menu);
        return true;
    }

}

动物是动物物品清单。很明显,适配器需要不同类型的对象。我认为这就是问题所在。有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

SimpleAdapter的构造函数声明为

public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

你正在将一个简单的清单传递给它。

你的名单必须是

List<HashMap<String, String>> animals;

答案 1 :(得分:0)

你真的应该使用自定义适配器而不是SimpleAdapter,它实际上不足以处理对象,你可以用SimpleAdapter做什么(假设你想按名字列出动物):

 SimpleAdapter adapter = new SimpleAdapter(this, GetSampleData(), android.R.layout.two_line_list_item, FROM, TO);

使用此方法:

List<Map> GetSampleData()
{
 List<Map> list = new ArrayList<Map>();
 for(int i=0;i<animals.size();i++){
    Map map = new HashMap();
    map.put("animalName", animals.get(i).getName());     
    list.add(map);
  }
 return list;
}