【问题标题】:Populating ListView After SQLite QuerySQLite 查询后填充 ListView
【发布时间】:2018-02-20 06:07:22
【问题描述】:

我需要从查询中填充数据并使用自定义ItemListView 上填充它。

OnCreateView,我这样称呼我的适配器:

final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>
                (getContext(), android.R.layout.simple_list_item_1, stops)

这是我LoadData的全部代码

public void LoadData() {
    String query = "SELECT ticket_placeto, COUNT(CASE WHEN passenger_type <> 'Baggage' THEN 1 END) AS Pass,\n" +
            "COUNT(CASE WHEN passenger_type =  'Baggage' THEN 1 END) AS Baggage FROM tickets GROUP BY ticket_placeto";

    c = sqldb.rawQuery(query, null);

    if (c != null) {
        if (c.moveToFirst()) {
            do {
                String placeto = c.getString(0);
                String passengers = c.getString(1);
                String baggages = c.getString(2);

                stops.add(placeto + "                 " + passengers + "               " + baggages);

            } while (c.moveToNext());
        }
    }
}

这是它的输出

我刚刚对stops.add 上的间距进行了硬编码,以便临时显示数据。我已经有一个自定义的ListItem Layout,但同时没有使用它。

这是对chrome://inspect的查询结果

enter image description here

【问题讨论】:

  • SimpleCursorAdapter替换ArrayAdapter,你会看到你的代码是如何自动变短的
  • @pskink 我已经尝试过一段时间,但我不知道如何获取我查询的数据并将其放在From 数组字符串中
  • 数据库查询成功后通知适配器arrayAdapter.notifyDataSetChanged();
  • From 只是列名,例如“ticket_placeto”、“Pass”等
  • @pskink 我应该使用LoadData 上的变量,我得到query 值吗?如果我像你提到的那样直接使用From,则没有数据显示

标签: android xml listview arraylist


【解决方案1】:

供您参考,我只是重新编码LoadData。感谢 pskink 在这里帮助我,也感谢其他回复此主题的人。

  public void LoadData() {
    String query = "SELECT _id, ticket_placeto, " +
            "COUNT(CASE WHEN passenger_type <> 'Baggage' THEN 1 END) AS Pass," +
            "COUNT(CASE WHEN passenger_type =  'Baggage' THEN 1 END) AS Baggage " +
            "FROM tickets GROUP BY ticket_placeto";


    final String[] columns = new String[]{
            DBHelper.TICKET_ID,
            DBHelper.TICKET_PLACETO,
            "Pass",
            "Baggage",
    };

    final int[] to = new int[]{
            R.id.stops_id,
            R.id.stops_location,
            R.id.stops_passengers,
            R.id.stops_baggages
    };


    c = sqldb.rawQuery(query,null);
    if (c != null) {
        adapter = new SimpleCursorAdapter(getContext(), R.layout.item_for_stops, c, columns, to, 0);
        lv_stops.setAdapter(adapter);
    }
}

【讨论】:

    【解决方案2】:

    1.首先在activty的onCreate()方法中初始化你的List,

    ArrayList<String> stops = new ArrayList<>();
    

    然后将其传递给 ArrayAdapter。

    2.成功执行查询后,将数据添加到您的“停止”列表中,然后 将以下行添加到您的代码中。

    arrayAdapter.notifyDataSetChanged();//to notify that your data of list has been change
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多