Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с базой данных 
:(
    Опции темы
Abbath1349
Дата 11.8.2012, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 16.6.2010

Репутация: нет
Всего: нет



Подскажите у меня есть проблема в Android у меня есть диалог со списоком из базы данных, когда я добавляю новую запись в базу данных и снова вызываю диалог там её нету приходиться перезапускать Activity можно это исправить?
Код:
Код

//Добавление в базу из класса Helper:
    public void addClient(String name)
    {
        SQLiteDatabase db=this.getWritableDatabase();
        ContentValues cv=new ContentValues();
        cv.put(Clients.CLIENT,name);
        db.insert(Clients.TABLE_NAME, null, cv);
        db.close();
    }
// получение данных из класса Helper
public String [] getClients()
    {
        List<String> values=new ArrayList<String>();        
        SQLiteDatabase db=this.getReadableDatabase();
        Cursor c = db.rawQuery("SELECT * from "+Clients.TABLE_NAME, null);
        int length;
        values.add("Добавить");
          while (c.moveToNext()) {
              int colid = c.getColumnIndex(Clients.CLIENT);
              String name = c.getString(colid);
              values.add(name);
          }
       length=values.size();
       db.close();
        return values.toArray(new String[length]);
    }

Код

// Вызов диалога в Activity
    case CLIENT_DIALOG_ID:
        final String[] clients=dbHelp.getClients();
        return createListDialog(clients, "Pick a client");

// Создание диалога в Ativity
private Dialog createListDialog(final String[] items,String titleName){
     

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(titleName);
    builder.setItems(items, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
         
         if(item==0){
             
             if(isCategoryNow) showDialog(ADD_CATEGORY_DIALOG_ID);        
             else showDialog(ADD_CLIENT_DIALOG_ID); 
         }
         else
         {
            Toast.makeText(getApplicationContext(),Integer.toString(item), Toast.LENGTH_SHORT).show();
         }
        }
    });
    return builder.create();
}

PM MAIL   Вверх
math64
Дата 11.8.2012, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 1
Всего: 72



Два способа:
1. Более простой, но идеологически неправильный, но работает
При закрытии диалога вместо dismissDialog(CLIENT_DIALOG_ID); вызвать removeDialog(CLIENT_DIALOG_ID);
2. Идеологически правильный, но более сложный
Переопределить наряду с protected Dialog onCreateDialog(int id, Bundle args); также protected void onPrepareDialog(int id, Dialog d, Bundle args);
в котором заменять items. Предпочтительнее не String[] items, а List<String> items.
А возможно даже лучше использовать не builder.setItems(items, listener); а builder.setAdapter(adapter, listener);
Получить обратно адаптер в onPrepareDialog можно так:
adapter = ((AlertDialog)d).getListView().getAdapter();

Это сообщение отредактировал(а) math64 - 11.8.2012, 21:49
PM   Вверх
Abbath1349
Дата 16.8.2012, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 16.6.2010

Репутация: нет
Всего: нет



вариант с removeDialog не работает к сожелению
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0574 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.