2016-05-24 15 views
1
geöffnet

Ich habe eine Notizblock Aktivität, die ein Fenster Dialog Version davon öffnet, wo Benutzer zu einer anderen App gehen und geben nach wie vor auf dem NotizblockBroadcastreceiver nicht empfangen können, wenn die Aktivität nicht

Für beiden Notizblock den gleichen Inhalt haben, Ich habe broadcastReceiver verwendet, um den Text der Notizblockaktivität auf den im Dialog zu setzen, wenn der Benutzer fertig ist.

Aktivität des BroadcastReceiver:

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     final globalVariable globalVariable = (globalVariable) getApplicationContext(); 
     et_editor.setText(globalVariable.getScriptEditorText()); 
     Toast.makeText(Script_editor.this, "Script Editor have been updated", Toast.LENGTH_SHORT).show(); 
    } 
}; 

Schließen des Dialogs:

btn_Close = (Button) view.findViewById(R.id.button_Close); 
btn_Close.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     AlertDialog alertDialog = new AlertDialog.Builder(getApplicationContext()) 
       .setTitle("Would you like to update the editor?") 
       .setNegativeButton("No, discard the changes", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         Toast.makeText(ColorCoordinatePickerService.this, "Changes have been discarded", Toast.LENGTH_SHORT).show(); 
         dialog.dismiss(); 
         stopSelf(); 
        } 
       }) 
       .setPositiveButton("Yes, update with changes", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         final globalVariable globalVariable = (globalVariable) getApplicationContext(); 
         globalVariable.setScriptEditortext(CCEditor.getText().toString()); 
         Intent intent = new Intent(BROADCAST_ACTION); 
         sendBroadcast(intent); 

         dialog.dismiss(); 
         stopSelf(); 
        } 
       }) 
       .create(); 

     alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 
     alertDialog.show(); 
    } 
}); 

es funktioniert, aber der Benutzer wieder auf die Notizblock Aktivität gehen (kann nicht in einer anderen App oder Tätigkeit sein).

Wie aktualisiere ich den Inhalt des Notizblocks, ohne ihn "öffnen" zu müssen?

+0

Sind enfernen Sie Empfänger in onPause() der Aktivität? Wenn ja, wird der Aufruf der Funktion onReceive() nicht empfangen. Registrieren und entmelden Sie den Empfänger in onCreate und onDestroy für diesen speziellen Fall –

Antwort

2

Warteschlange die Änderungen in BroadcastReceiver und wenn NotepadActivity wieder aufgenommen wird, setzen Sie die Änderungen in EditText. Die Warteschlange muss keine tatsächliche Warteschlange sein, Sie können die Daten der letzten Broadcast-Empfänger irgendwo speichern.

+1

die Änderungen in onResume funktioniert, danke! –

0

Ich bin nicht sicher, aber es kann klar sein, Ihre globale Variable beim Verschieben von Aktivität zu einer anderen Aktivität, auch Sie deklarieren die Instanz der globalen Variablen so wird es Wert in Instanz nicht in Hauptvariable setzen und dafür werden Sie nicht Holen Sie es auf den Empfänger.

Also ich denke, Sie sollten Wert in Absicht setzen und dann auf Empfänger und verwalten, damit es funktioniert.

prüfen unten, zuerst Ihre Click-Ereignis Methode Dialogfeld

@Override 
    public void onClick(DialogInterface dialog, int which) { 
      final globalVariable globalVariable = (globalVariable) getApplicationContext(); 
      globalVariable.setScriptEditortext(CCEditor.getText().toString()); 
      Intent intent = new Intent(BROADCAST_ACTION); 

      intent.putExtra("global_variable","" + CCEditor.getText().toString()); 
      sendBroadcast(intent); 

      dialog.dismiss(); 
      stopSelf(); 
    } 

Und jetzt Wert in Empfänger erhalten als wie unten.

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     final globalVariable globalVariable = (globalVariable) getApplicationContext(); 

     String strData = intent.getExtras().getString("global_variable"); 

     et_editor.setText(strData); 
     Toast.makeText(Script_editor.this, "Script Editor have been updated", Toast.LENGTH_SHORT).show(); 
    } 
}; 

Hope this

arbeiten
0

ohne acitivity zu öffnen, möchten Sie Daten dann können Sie tun, nur einen Weg aktualisieren it.when Sie in Empfänger erhalten setzen Sie alle Daten in sharepreference.Whenever Ihre Notizen Aktivität öffnet Ihnen kann festlegen, dass Daten aus der Gruppenrichtlinie übernommen und in eine Notizfunktion gesetzt werden.

Verwandte Themen