Как установить элемент массива для добавления в обратном порядке? - PullRequest
0 голосов
/ 08 сентября 2011

В моем приложении я собираюсь сохранить имя всех доступных таблиц из моей базы данных с этим кодом:

     public ArrayList<Object> showAllTable()
  {
      ArrayList<Object> tableList = new ArrayList<Object>();

      String SQL_GET_ALL_TABLES = "SELECT name FROM sqlite_master WHERE type='table'";
      Cursor cursor = db.rawQuery(SQL_GET_ALL_TABLES, null);
      cursor.moveToFirst();

      if (!cursor.isAfterLast()) 
      {
          do 
          {
              if(cursor.getString(0).equals("android_metadata"))
              {
                  //System.out.println("Get Metadata");
                  continue;
              }
              else
              {
                  tableList.add(cursor.getString(0));
              }
          }
          while (cursor.moveToNext());
      }
      cursor.close();

      return tableList;

  }

Да, я могу хранить его. Но в то время как я собираюсь отобразить его в ListView, он будет отображаться таким образом, что последний созданный показан наконец. Я хочу отобразить список таблицы как «Последний созданный», сначала отобразить в ListView.

Пожалуйста, помогите мне, что я должен сделать в своем коде, чтобы установить такой способ отображения таблиц?

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

перед возвратом значений просто вызовите метод

Collections.reverse(tableList);

см. Полный код

public ArrayList<Object> showAllTable()

{ 
 ArrayList tableList = new ArrayList();

 String SQL_GET_ALL_TABLES = "SELECT name FROM sqlite_master WHERE type='table'";
 Cursor cursor = db.rawQuery(SQL_GET_ALL_TABLES, null);
 cursor.moveToFirst();

 if (!cursor.isAfterLast()) 
 {
  do 
  {
      if(cursor.getString(0).equals("android_metadata"))
      {
          //System.out.println("Get Metadata");
          continue;
      }
      else
      {
          tableList.add(cursor.getString(0));
      }
  }
  while (cursor.moveToNext());
 }
 cursor.close();
 Collections.reverse(tableList);
 return tableList;
}
2 голосов
/ 08 сентября 2011

Есть несколько способов сделать это.Возможно, проще всего изменить вызов SQL, добавив ORDER BY.Вот что вы можете попробовать:

Чтобы заказать товары по возрастанию:

String SQL_GET_ALL_TABLES = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name ASC";

Или по убыванию:

String SQL_GET_ALL_TABLES = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name DESC";

Альтернативное решение

Другой вариант - сделать это так, как вы делаете это прямо сейчас, и вместо этого пройти через Cursor от последнего до первого элемента.Вот некоторый псевдокод:

if (cursor.moveToLast()) {
   while (cursor.moveToPrevious()) {
      // Add the Cursor data to your ArrayList
   }
}
...