2016-11-04 61 views
0

我有一个对话框活动,每次警报关闭时都会设置警报对话框。现在这个警报对话框可以是任何活动的前面。当警报器应该熄灭时,它会被警报管理器调用。 问题是,如果此警报对话框出现在保存即将到来的警报列表的主要活动的前面,那么当我“解除”警报时,该警报应该从列表中删除(它会被删除),但是在警报对话框后消失的主要活动不会得到更新,除非我恢复活动或去下一个活动,然后回到主要活动。更新其他活动的警报对话框被取消时在主要活动中更新列表视图

我打过电话对话的onDismiss方法像这里面的主要活动:

alert.setOnDismissListener(new DialogInterface.OnDismissListener() { 
     @Override 
     public void onDismiss(DialogInterface dialog) { 

       ((MainActivity) context).customAdapter.notifyDataSetChanged(); 
     } 
    }); 

但是我得到我的DialogActivity的情况下不能得到转化为主要活动的情况下例外。我该如何解决这个问题?

这里是我的对话框Activity类

public class DialogActivity extends AppCompatActivity { 

AlarmManager alarmManager; 
PendingIntent pendingIntent; 
Intent startSetAlarm; 
Intent i; 
Intent intent; 
String alarmStatus; 
int alarmID; 
String alarmName; 
String alarmTime; 
String alarmAMPM; 
String alarmSound; 
String snoozingType; 
Context context; 

private SensorManager mSensorManager; 
private Sensor mAccelerometer; 
private ShakeListener mShakeDetector; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_dialog); 

........

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder 
      .setTitle("Alarm Clock") 
      .setMessage("What to do with " + alarmName + ": " + alarmTime + " " + alarmAMPM +"?") 
      .setCancelable(false) 
      .setPositiveButton("Dismiss", new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dialog, int id) 
       { 
         alarmManager.cancel(pendingIntent); 
         i.putExtra("Status","Alarm Off"); 
         i.putExtra("calledBefore",true); 
         i.putExtra("Alarm ID", alarmID); 
         i.putExtra("Alarm Name", alarmName); 
         i.putExtra("Alarm Time", alarmTime); 
         i.putExtra("Alarm AMPM", alarmAMPM); 
         i.putExtra("Alarm Sound", alarmSound); 
         i.putExtra("Snooze Type", snoozingType); 
         sendBroadcast(i); 
         dialog.dismiss(); 
         finish(); 
        //startActivity(startSetAlarm); 
       } 
      }) 
      .setNegativeButton("Snooze", new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dialog, int id) 
       { 
        alarmManager.cancel(pendingIntent); 
        i.putExtra("Status","Alarm Off"); 
        i.putExtra("calledBefore",true); 
        i.putExtra("Alarm ID", alarmID); 
        i.putExtra("Alarm Name", alarmName); 
        i.putExtra("Alarm Time", alarmTime); 
        i.putExtra("Alarm AMPM", alarmAMPM); 
        i.putExtra("Alarm Sound", alarmSound); 
        i.putExtra("Snooze Type", snoozingType); 
        sendBroadcast(i); 
        Snooze(); 
        dialog.dismiss(); 
        finish(); 
       } 
      }); 
    final AlertDialog alert = builder.create(); 
    alert.show(); 

然后我打电话onDismiss方法,我之前展示。我也尝试过在DialogActivity中构造一个构造函数,并在main中初始化dialogactivity的对象,将main的上下文传递给它,但是我得到的错误是“对话框活动没有一个没有参数的构造函数”如果我创建一个默认构造函数,一个例外,它不起作用。

UPDATE 我想通了。为了获得更新的信息,我必须检索存储在共享首选项中的列表。更新的列表只在onCreate中调用,而不是在onResume中调用。 但是我现在有另一个问题。这仍然与相同的活动生命周期困境有关。如果我的应用程序已关闭(并且不在打开的应用程序列表中),并且我收到对话框通知,如果我关闭闹钟,它将关闭,对话框将消失。不过,我现在可以在最近的列表中看到我的应用程序。当我从那里打开我的应用程序时,我的对话框活动处于活动状态,它只是继续显示对话框,并且不让我进入该应用程序。除非我去应用程序抽屉,并从那里打开应用程序。这是我的意思的截图。 Dialog Problem

+0

您不必设置'onDismiss()'侦听器。只需在'onResume()'中填充警报列表,而不是'onCreate()'。 –

+0

我试着做以下,但它没有工作@Override 保护无效onResume(){ customAdapter = new CustomAdapter(this,list); listView.setAdapter(customAdapter); customAdapter.notifyDataSetChanged(); super.onResume(); } –

+0

'super.onResume();'应该是'onResume()'中的第一条语句。 –

回答

0

您必须使用BroadcastReceiver的EventBus库。您创建之前的活动不会刷新您的ListView。

0

如何在您的片段或活动的onResume()方法中调用notifyDataSetChanged()(取决于您的ListView)。

+0

不起作用。我之前也尝试过。@Override protected void onResume(){ customAdapter.notifyDataSetChanged(); super.onResume(); } –

+0

我检查了onResume会在我关闭对话框时调用。所以notifyDataSetChanged()方法应该可以工作,但为什么它不工作? –

+0

您在什么时候删除闹钟?在删除发生之前,Resume有可能被调用。 –

相关问题