0

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

我收到此错误:

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;
    }

}

动物是动物对象的列表。显然适配器想要不同类型的对象。我认为这就是问题所在。谁能帮我解决这个问题?

4

2 回答 2

3

SimpleAdapter 的构造函数声明为

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

并且您正在向其中传递一个简单的列表。

你的清单必须是这样的

List<HashMap<String, String>> animals;

于 2012-11-29T15:23:47.310 回答
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;
}
于 2012-11-29T15:39:24.240 回答