Assume we have two activities. Activity A and B. A is the parent activity and B is the child.
So A need to create an intent to start B. It should pass an extra data which is the name of the parent activity. Here in our example it should be 'A'. Here is the code,
Intent intent = new Intent();
intent.putExtra("ParentClassName","A");
startActivity(intent.setClass(A.this, B.class)); //we are starting activity 'B'
Now in activity B we need to override getSupportParentActivityIntent() and it should look like this,
@Override
public Intent getSupportParentActivityIntent() {
Intent parentIntent= getIntent();
//getting the parent class name
String className = parentIntent.getStringExtra("ParentClassName");
Intent newIntent=null;
try {
//you need to define the class with package name
newIntent = new Intent(B.this,Class.forName("com.myapplication."+className));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return newIntent;
}
I read on the Android site about using "getSupportParentActivityIntent()" and implemented my solution roughly the same as yours. I tried it out, but there seems to be a big caveat: when running on Jelly Bean, the support library delegates to the "native" ActionBar and it calls back to "getParentActivityIntent()" instead of "getSupportParentActivityIntent()". I think it may be necessary to override both methods to get code to work on all Android versions.
ReplyDeletesaved me a bit of time, nice work man!
ReplyDelete