我正在尝试为我的活动添加适配器,以便显示动物列表。
我收到此错误:
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;
}
}
动物是动物物品清单。很明显,适配器需要不同类型的对象。我认为这就是问题所在。有人可以帮我解决这个问题吗?
答案 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;
}