当另一个活动的警报对话框被解除时,更新主要活动中的列表视图

时间:2016-11-04 18:32:00

标签: android listview android-alertdialog

我有一个对话框活动,每次闹钟响起时都会设置一个警告对话框。现在,此警报对话框可以在任何活动的前面。当警报响起时,警报管理器会调用它。 问题是,如果此警报对话框位于主要活动的前面,该主要活动包含即将发出的警报列表,那么当我"解雇"警报,该警报应从列表中删除(确实会被删除),但在警报对话框消失后,主要活动不会更新,除非我恢复活动或转到下一个活动然后返回主要活动。

我尝试在对话框的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

1 个答案:

答案 0 :(得分:0)

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