Cómo utilizar la interfaz para comunicarse entre dos actividades

Estoy tratando de hacer interfaz de escucha entre dos actividades Act1 and Act2 . Act1 comenzará Act2 . Si hay algún evento ocurrido en Act2 , lo informará a Act1 . El problema es que estoy comenzando una nueva actividad usando Intent, así que ¿cómo Act1 se asignará como oyente a la interfaz de Act2?

Act1.java

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

Nota: Por favor, no me sugiera que use fragmentos. Quiero usar actividades actualmente.

¿Ha considerado utilizar LocalBroadcastManager ?

En el acto de Act1:

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

En la Ley de Act1:

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

En Act2's onCreate:

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

Déme un comentario si el código no compila, lo estoy escribiendo a mano.

Yo sugeriría crear una clase de modelo . Dejame darte un ejemplo:

Clase del modelo:

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

Y aquí está cómo usted utilizaría esto:

 // 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)); } } 

Cambio del estado miembro en la segunda actividad:

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

Salida LogCat:

Current state: false

MainActivity says: Model state changed: true

La forma más fácil es utilizar objetos estáticos, como esto:

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

Evitar la complejidad, mantenerlo simple y estúpido.

  • Cambiar el tamaño de una ruta en el lienzo de Android
  • Búsqueda de diseños por ID
  • Juego gratuito de asignación
  • ¿Usando la cadena del recurso XML en el interruptor?
  • ¿Cómo se guardan las imágenes de Amazon S3 desde la cámara Android?
  • Extraño error al ejecutar httpclient
  • ¿Cómo instalar el paquete de iconos en el lanzador personalizado?
  • Cómo detectar el botón de volumen haga clic en el servicio de fondo o en el entorno nativo en Android?
  • Error al crear la propia biblioteca de tarro para el proyecto de Android
  • Equivalentes de cifrado / descifrado en Java para construcciones C #
  • Resolver Etiqueta de aplicación para cada tipo de compilación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.