2016-11-04 1 views
0

Ich habe eine Dialogaktivität, die jedes Mal, wenn der Alarm ausgelöst wird, einen Alarmdialog einrichtet. Jetzt kann dieser Alarmdialog vor jeder Aktivität stehen. Wie es vom Alarmmanager aufgerufen wird, wenn der Alarm ausgelöst werden soll. Das Problem ist, dass, wenn dieser Alarmdialog vor der Hauptaktivität kommt, die die Liste der bevorstehenden Alarme enthält, wenn der Alarm "gekündigt" wird, sollte dieser Alarm aus der Liste entfernt werden (die gelöscht wird), aber nach dem Alarmdialog verschwindet die Hauptaktivität wird nicht aktualisiert, es sei denn, ich nehme die Aktivität wieder auf oder gehe zur nächsten Aktivität und dann zurück zur Hauptaktivität.Listenansicht in der Hauptaktivität aktualisieren, wenn der Benachrichtigungsdialog einer anderen Aktivität abgewiesen wird

Ich habe versucht, die Haupttätigkeit in der onDismiss Methode des Dialogs wie folgt aufrufen:

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

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

Jedoch habe ich eine Ausnahme, die den Kontext meiner DialogActivity erhalten kann, nicht in die Haupttätigkeit der Kontext konvertiert werden. Wie kann ich das lösen?

Hier ist mein Dialog Aktivitätsklasse

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(); 

Und dann rufe ich die onDismiss Methode, die ich früher zeigte. Ich habe auch versucht, einen Konstruktor von DialogActivity zu machen und das Objekt von dialogactivity in main zu initialisieren, um den main-Kontext in es zu übergeben, aber ich bekomme den Fehler "Dialog-Aktivität hat keinen Konstruktor ohne Parameter" Wenn ich einen Standard-Konstruktor mache, bekomme ich immer noch eine Ausnahme und es funktioniert nicht.

UPDATE Ich fand es heraus. Ich musste meine in gemeinsamen Voreinstellungen gespeicherte Liste abrufen, um die aktualisierte zu erhalten. Die aktualisierte Liste wurde nur onCreate nicht in onResume aufgerufen. Allerdings habe ich jetzt ein anderes Problem. Was immer noch mit dem gleichen Aktivitätslebenszyklus-Dilemma verbunden ist. Wenn meine Anwendung geschlossen ist (und sich nicht in der Liste der geöffneten Apps befindet) und ich die Dialogbenachrichtigung erhalte, wird der Alarm deaktiviert und der Dialog wird gelöscht. Allerdings kann ich meine App jetzt in der aktuellen Liste sehen. Und wenn ich meine App von dort aus öffne, ist meine Dialogaktivität aktiv und sie zeigt nur den Dialog an und lässt mich nicht in die App gehen. Es sei denn, ich gehe in die App-Schublade und öffne die App von dort. Hier ist ein Screenshot von dem, was ich meine. Dialog Problem

+0

Sie müssen 'onDismiss()' Listener nicht festlegen. Füllen Sie einfach die Alarmliste in 'onResume()' statt 'onCreate()'. –

+0

Ich habe versucht, Folgendes zu tun, aber es hat nicht funktioniert @Override geschützt void onResume() { customAdapter = neue CustomAdapter (this, list); listView.setAdapter (customAdapter); customAdapter.notifyDataSetChanged(); super.onResume(); } –

+0

'super.onResume();' sollte die erste Anweisung in 'onResume()' sein. –

Antwort

0

Sie müssen BroadcastReceiver oder EventBus Bibliothek verwenden. Ihre Aktivität vor dem Erstellen nicht zu aktualisieren Sie ListView.

0

Wie wäre es mit notifyDataSetChanged() in der onResume() Methode Ihres Fragments oder Ihrer Aktivität, die Ihren ListView hält.

+0

Funktioniert nicht. Das habe ich auch schon mal [email protected] protected void onResume() { customAdapter.notifyDataSetChanged(); super.onResume(); } –

+0

Ich habe überprüft, dass OnResume aufgerufen wird, wenn ich den Dialog abbringe. Also sollte die notifyDataSetChanged() Methode funktionieren, aber warum funktioniert sie nicht? –

+0

An welchem ​​Punkt löschen Sie den Alarm? Es besteht die Möglichkeit, dass bei Resume vor dem Löschen aufgerufen wird. –

Verwandte Themen