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 に答える