Friday, February 28, 2014

How to set an activity dynamically for up-button in android

This is done by implementing getSupportParentActivityIntent() method  and using it we can dynamically set the activity to up-button in android. Here how I have achieved it.

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

2 comments:

  1. 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.

    ReplyDelete
  2. saved me a bit of time, nice work man!

    ReplyDelete