我有一个对话框活动,每次闹钟响起时都会设置一个警告对话框。现在,此警报对话框可以在任何活动的前面。当警报响起时,警报管理器会调用它。 问题是,如果此警报对话框位于主要活动的前面,该主要活动包含即将发出的警报列表,那么当我"解雇"警报,该警报应从列表中删除(确实会被删除),但在警报对话框消失后,主要活动不会更新,除非我恢复活动或转到下一个活动然后返回主要活动。
我尝试在对话框的onDismiss方法中调用main活动,如下所示:
alert.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
((MainActivity) context).customAdapter.notifyDataSetChanged();
}
});
但是我得到一个例外,即我的DialogActivity的上下文无法转换为主要活动的上下文。我该如何解决这个问题?
这是我的Dialog 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中初始化对话框的对象,将main的上下文传递给它,但是我得到的错误是" Dialog活动没有构造函数没有参数"如果我创建了一个默认构造函数,我仍然会得到一个例外但它不起作用。
更新 我想到了。我必须检索存储在共享首选项中的列表才能获得更新的列表。更新的列表仅在onCreate中调用,而不是在onResume中调用。 但是我现在有另一个问题。这仍然与相同的活动生命周期困境有关。如果我的应用程序已关闭(并且不在打开的应用程序列表中)并且我收到对话框通知,如果我关闭了警报,它将关闭并且对话框消失。但是我现在可以在最近的列表中看到我的应用程序。当我从那里打开我的应用程序时,我的对话框活动处于活动状态,它只是继续显示对话框,并且不允许我进入应用程序。除非我去应用程序抽屉并从那里打开应用程序。这是我的意思的屏幕截图。 Dialog Problem
答案 0 :(得分:0)
您必须使用 BroadcastReceiver 或 EventBus 库。创建之前的活动不要刷新ListView。