Listview重复信息

时间:2014-05-12 14:16:40

标签: android android-listview arraylist simplecursoradapter

我正在尝试使用2个数据库列进行listview。我成功但问题是只有数据库的第一个信息出现在listview中。如果我在数据库中有x数据,它将在列表视图中显示x行,只显示第一个条目。

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
data = new ArrayList();
    Cursor cursor = mydb.rawQuery("SELECT * FROM projeto", null);

    if (cursor.moveToFirst()) {
        Toast.makeText(getApplicationContext(), "Caminhos:", 3000).show();
        data.clear();
        do {
            data.add(cursor.getString(cursor.getColumnIndex("id_proj")));
            data.add(cursor.getString(cursor.getColumnIndex("nome")));
            map.put("id", data.get(0).toString());
            map.put("nome", data.get(1).toString());
            map.put("hora", "17:00");
            mylist.add(map);
        } while (cursor.moveToNext());


        SimpleAdapter resul = new SimpleAdapter(MainActivity.this, mylist,R.layout.list_item,new String[] {"id", "nome", "hora"}, new int[] {R.id.i, R.id.n, R.id.h});
        lista.setAdapter(resul);

3 个答案:

答案 0 :(得分:0)

看看这个,

map.put("id", data.get(0).toString());
map.put("nome", data.get(1).toString());
map.put("hora", "17:00");

你总是把相同的钥匙放在地图上,总是“id,nome和hora”你需要把不同的钥匙。

ps:为什么要创建地图列表?你不需要这个。

答案 1 :(得分:0)

每次循环都需要清除data。您需要在data.clear()循环开始后将呼叫移至do {。您当前正在做的事情意味着从光标检索到第一个项目后,数据将包含2个项目。在第二次之后它将包含4,然后是6,等等。然后你总是阅读相同的两个项目。如果您清除data,则应解决问题。

答案 2 :(得分:0)

我在你的代码中看到两个问题:

  • 您不清除数据(如上一个答案所述),因此您始终可以获得前两个值
  • 您始终使用相同的地图。由于地图是一个对象,因此您将始终对其进行修改,并且您的列表将填充一个地图。

要解决这两点,请尝试以下方法:

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
data = new ArrayList();
Cursor cursor = mydb.rawQuery("SELECT * FROM projeto", null);

if (cursor.moveToFirst()) {
    Toast.makeText(getApplicationContext(), "Caminhos:", 3000).show();
    do {
        HashMap<String, String> map = new HashMap<String, String>();
        data.clear();
        data.add(cursor.getString(cursor.getColumnIndex("id_proj")));
        data.add(cursor.getString(cursor.getColumnIndex("nome")));
        map.put("id", data.get(0).toString());
        map.put("nome", data.get(1).toString());
        map.put("hora", "17:00");
        mylist.add(map);
    } while (cursor.moveToNext());


    SimpleAdapter resul = new SimpleAdapter(MainActivity.this, mylist,R.layout.list_item,new String[] {"id", "nome", "hora"}, new int[] {R.id.i, R.id.n, R.id.h});
    lista.setAdapter(resul);