从包含一个对象作为值的哈希表创建一个listView适配器



我是android新手& &;java我有一个包含值的哈希表。值是对象(任务类有3个属性code,title,state)

我试图在哈希表中获得所有任务的数据并在列表视图中显示它们

ListView list = (ListView)findViewById(R.id.output_list);
ArrayList<task> arr = new ArrayList<task>(tasklist.values());
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.list, arr );
list.setAdapter(arrayAdapter);

tasklist is哈希表名称

task是一个实体类

public class taskDAO {
    public static final Hashtable<Integer , task> tasklist = new Hashtable<Integer , task>();
    public static final boolean addTask (task t){
        tasklist.put(t.code,t);
        return true;
    }

E/AndroidRuntime: FATAL EXCEPTION: mainjava.lang.IllegalStateException: ArrayAdapter要求资源ID为TextView

我尝试了很多事情,但因为我不知道这是如何工作的,我不能弄清楚一个解决方案,任何帮助吗?

你的错误是告诉你,第二个参数适配器需要是一个TextView布局,而不是一个ListView布局(或无论list.xml文件包含)

如果您在task类上实现toString方法(由于Java命名约定,您应该将其重命名为Task)。

然后,当你使用 时,你会看到数据
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
    this, 
    android.R.layout.simple_list_item_1, 
    arr);

有关该布局的更多细节,请参见What is "android. r.l outout .simple_list_item_1"?

将适配器泛型类型字符串更改为类名,即task,因此它看起来像

ArrayAdapter<task> arrayAdapter = new ArrayAdapter<task>(this,R.layout.list, arr );

当然,让你的类名以大写字母开头,如TaskDAO而不是taskDAO

相关内容

最新更新