2016-05-17 9 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