Wie man Schnittstelle benutzt, um zwischen zwei Tätigkeiten zu kommunizieren

Ich versuche, die Zuhörer-Schnittstelle zwischen zwei Aktivitäten Act1 and Act2 . Act1 startet Act2 . Wenn in Act2 Ereignis aufgetreten ist, wird es es Act1 informieren. Problem ist, dass ich eine neue Aktivität mit Intent starten werde, also wie Act1 sich als Hörer der Act2-Schnittstelle zuweist?

Act1.java

  • RelativeLayout ausblenden Elternteil * Seite * + Rand * Seite *
  • Android - wie man Bitmap von res ohne Größenänderung lädt?
  • Warnungen mit Proguard (mit externen Bibliotheken)
  • Android - Google Play Ausfilterung xxhdpi
  • Wie kann man verhindern, dass der Affen die Statusleiste öffnet?
  • Ansicht mit horizontaler und vertikaler Wanne / Schleife und Prise Zoom
  •  public class Act1 extends ActionBarActivity implements ActionBar.OnNavigationListener { ActionBar actionbar; Intent pizzaIntent; boolean visibleFirstTime = true; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.menutab); //set actionbar here } @Override public boolean onNavigationItemSelected(int arg0, long arg1)// item pos, // itemid { switch (arg0) { case 0: if(this.visibleFirstTime == false) { if(pizzaIntent == null) { pizzaIntent = new Intent(this,Act2.class); //how to call setChangeListener? } startActivity(pizzaIntent); } else this.visibleFirstTime = false; break; case 1: System.out.println("selected: " + arg0); break; case 2: System.out.println("selected: " + arg0); break; case 3: System.out.println("selected: " + arg0); break; default: break; } return true; } } 

    Act2.java

     public class Act2 extends Activity { selectionChangeListener listener; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.pizza_slice_selection); } public void setChangeListener(selectionChangeListener listener) { this.listener = listener; } private interface selectionChangeListener { public void selectionMadeAtIndex(int index); } } 

    Hinweis: Bitte schlage mir nicht vor, Bruchstücke zu benutzen. Ich möchte Aktivitäten derzeit nutzen.

  • Xamarin Android Player / Visual Studio: Stuck bei "Starting Emulator"
  • Wie kann ich den Kamerabilder-Ordner eines Android-Telefons herausfinden?
  • Wie kann ich effektiv C-Code, der mit JNI in Eclipse verpackt ist, debuggen? (Android Dev)
  • Wie man meinen gradle für endgültige freigabe apk setzt
  • Aufblasbare Layout-Schaltflächen onClick Hörer funktioniert nicht
  • RadioGroup: Wie kann ich programmgesteuert überprüfen?
  • 3 Solutions collect form web for “Wie man Schnittstelle benutzt, um zwischen zwei Tätigkeiten zu kommunizieren”

    Hast du die Verwendung von LocalBroadcastManager in Betracht gezogen ?

    In Act1's onCreate:

     act2InitReceiver= new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // do your listener event stuff } }; LocalBroadcastManager.getInstance(this).registerReceiver(act2InitReceiver, new IntentFilter("activity-2-initialized")); 

    In Act1's onDestroy:

     LocalBroadcastManager.getInstance(this).unregisterReceiver(act2InitReceiver); 

    In Act2's onCreate:

     LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("activity-2-initialized")); 

    Gib mir einen Kommentar, wenn der Code nicht kompiliert, ich schreibe ihn von Hand.

    Ich würde vorschlagen, eine Modellklasse zu erstellen. Lassen Sie mich Ihnen ein Beispiel geben:

    Modellklasse:

     public class CustomModel { public interface OnCustomStateListener { void stateChanged(); } private static CustomModel mInstance; private OnCustomStateListener mListener; private boolean mState; private CustomModel() {} public static CustomModel getInstance() { if(mInstance == null) { mInstance = new CustomModel(); } return mInstance; } public void setListener(OnCustomStateListener listener) { mListener = listener; } public void changeState(boolean state) { if(mListener != null) { mState = state; notifyStateChange(); } } public boolean getState() { return mState; } private void notifyStateChange() { mListener.stateChanged(); } } 

    Und hier ist, wie Sie das verwenden würden:

     // Imports public class MainActivity extends Activity implements OnCustomStateListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); CustomModel.getInstance().setListener(this); boolean modelState = CustomModel.getInstance().getState(); Log.d(TAG, "Current state: " + String.valueOf(modelState)); Intent intent = new Intent(this, SecondActivity.class); startActivity(intent); } @Override public void stateChanged() { boolean modelState = CustomModel.getInstance().getState(); Log.d(TAG, "MainActivity says: Model state changed: " + String.valueOf(modelState)); } } 

    Ändern des Mitgliedsstaates in der zweiten Aktivität:

     // Imports public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); CustomModel.getInstance().changeState(true); } } 

    LogCat-Ausgang:

    Current state: false

    MainActivity says: Model state changed: true

    Der einfachste Weg ist, statisches Objekt zu benutzen, wie folgt:

     class Act1 extends Activity { static String msg1 = "Hi"; } class Act2 extends Activity { String msg2; public onCreate() { msg2 = Act1.msg1; } } 

    Vermeiden Sie Komplexität, halten Sie es einfach und dumm.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.