2016-05-17 3 views
-1

Я знаю, что есть похожие вопросы по этой проблеме, но никто из них не работал для меня.Android refresh ListView

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

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

PS .: Я уже пробовал adapter.notifyDataSetChanged();

Вот мой код:

UITools.adaptAlarmsListView(this, listView, R.layout.alarm_listview_item); 
listView.setOnItemLongClickListener(
      new AdapterView.OnItemLongClickListener() 
      { 
       @Override 
       public boolean onItemLongClick(AdapterView<?> adapterView, 
               View view, 
               final int position, long l) 
       { 
        final boolean[] deletedFlag = {false}; // Tells if the alarm has been deleted 
        UITools.showDialogue(HomeActivity.this, 
          getString(R.string.delete), 
          getString(R.string.delete_question), 
          R.drawable.bin, getString(R.string.no), 
          new DialogInterface.OnClickListener() 
          { 
           @Override 
           public void onClick(
             DialogInterface dialogInterface, int i) 
           { 
            // Do nothing 
           } 
          }, getString(R.string.yes), 
          new DialogInterface.OnClickListener() 
          { 
           @Override 
           public void onClick(
             DialogInterface dialogInterface, int i) 
           { 
            AlarmDAO.delete(getBaseContext(), 
              position + 1); 
            UITools.showToast(getBaseContext(), 
              getString(R.string.deleted), 
              Toast.LENGTH_SHORT); 
            deletedFlag[0] = true; 
           } 
          }); 
        if (deletedFlag[0]) 
        { 
         listView.setAdapter(null); 
         UITools.adaptAlarmsListView(HomeActivity.this, 
           listView, R.layout.alarm_listview_item); 
        } 
        return true; 
       } 
      } 
    ); 

UITools.adaptAlarmsListView:

/** 
* Adapts the alarms ListView 
* @param context - Context 
* @param listView - ListView 
* @param listViewItemId - int 
*/ 
public static void adaptAlarmsListView(Context context, ListView listView, 
           int listViewItemId) 
{ 
    Alarm[] alarms = AlarmDAO.getAlarms(context); 
    AlarmAdapter adapter = new AlarmAdapter(context, listViewItemId, alarms); 
    listView.setAdapter(adapter); 
} 
+1

Вы должны опубликовать свой код. – jzarsuelo

+0

Просто запустите код, который загружает его в первую очередь. – petey

+0

@jzarsuelo, опубликовано – AlanC92

ответ

0
If your are using a fragment, just create an interface on that fragment 
and over the interface in the activity that hosts the fragment and 
replace the present fragment with itself. or 
create a method the re-initializes the listview, it adapter and the list. 
if this is not clear enough, paste your code so i can check where the problem is. 
+0

Нет, я не использую фрагмент, я только что редактировал свой вопрос, теперь с кодом – AlanC92

+0

в классе AlarmAdapter очистите ArrayList в конструкторе перед добавлением новых данных. Затем перед listView.setAdapter (адаптер); adapter.notifyDataSetChanged(); – Franklyn