I am trying to make listener interface between two activities Act1 and Act2. Act1 will start Act2. If there is some event occurred in Act2, it will inform it to Act1. Problem is that I am starting new activity using Intent, so how Act1 will assign itself as listener to Act2's interface?
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); } } Note: Please don't suggest me to use fragments. I want to use activities currently.
And now you can just add the interface as an extra to the Intent which starts the other Activity : Intent intent = new Intent(context, OtherActivity. class); intent. putExtra("interface", inter); startActivity(intent);
This example demonstrates how do I communicate between Activity and Service in android. Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and fill all required details to create a new project. Step 2 − Add the following code to res/layout/activity_main. xml.
I would suggest to create a model class. Let me give you an example:
Model class:
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(); } } And here's how you would use this:
// 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)); } } Changing the member state in second activity:
// Imports public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); CustomModel.getInstance().changeState(true); } } LogCat output:
Current state: false
MainActivity says: Model state changed: true
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With