Question

I need some explanation / suggestions and maybe some example how to replace my ActivityGroup class with using Fragments. I've wrote that application like a year ago with using the deprecated TabActivity combining ActivityGroup so I can still keep the tabs when entering different activities. So now I want to rewrite my app and use the new API's and I'm really curious about how to rewrite the methods and the whole idea using activities with fragments and keep the tab bars during the whole interaction with the application. I don't need to replace TabActivity with new tabs and ActionBar. Here is an example of my TabGroupActivity which Im using to keep the tab bars at the bottom of the app :

    public class TabGroupActivity extends ActivityGroup {

    private ArrayList<String> mIdList;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);       
        if (mIdList == null) mIdList = new ArrayList<String>();
    }

    /*
     * This is called when a child activity of this one calls its finish method. 
     * This implementation calls {@link LocalActivityManager#destroyActivity} on the child activity
     * and starts the previous activity.
     * If the last child activity just called finish(),this activity (the parent),
     * calls finish to finish the entire group.
     */
  @Override
  public void finishFromChild(Activity child) {
      LocalActivityManager manager = getLocalActivityManager();
      int index = mIdList.size()-1;

      if(index < 1) {
              finish();
              return;
      } 

      try {
            manager.destroyActivity(mIdList.get(index), true);
            mIdList.remove(index);
            index--;
            String lastId = mIdList.get(index);
            if(manager.getActivity(lastId).getIntent() == null){
                finish();
            } else if(manager.getActivity(lastId).getIntent() != null){
                Intent lastIntent = manager.getActivity(lastId).getIntent();
                Window newWindow = manager.startActivity(lastId, lastIntent);
                setContentView(newWindow.getDecorView());
            }
      }catch (NullPointerException e){
          finish();
      }

  }

  /*
   * Starts an Activity as a child Activity to this.
   * @param Id Unique identifier of the activity to be started.
   * @param intent The Intent describing the activity to be started.
   * @throws android.content.ActivityNotFoundException.
   */
  public void startChildActivity(String Id, Intent intent) {     
      Window window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
      if (window != null) {
          mIdList.add(Id);
          setContentView(window.getDecorView()); 
      }    
  }

  /*
   * The primary purpose is to prevent systems before android.os.Build.VERSION_CODES.ECLAIR
   * from calling their default KeyEvent.KEYCODE_BACK during onKeyDown.
   */
  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
      if (keyCode == KeyEvent.KEYCODE_BACK) {
          //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
          return true;
      }
      return super.onKeyDown(keyCode, event);
  }

  /*
   * Overrides the default implementation for KeyEvent.KEYCODE_BACK 
   * so that all systems call onBackPressed().
   */
  @Override
  public boolean onKeyUp(int keyCode, KeyEvent event) {
      if (keyCode == KeyEvent.KEYCODE_BACK) {
          onBackPressed();
          return true;
      }
      return super.onKeyUp(keyCode, event);
  }

  /*
   * If a Child Activity handles KeyEvent.KEYCODE_BACK.
   * Simply override and add this method.
   */
  @Override
  public void  onBackPressed () {
      int length = mIdList.size();
      if ( length >=1) {
          Activity current = getLocalActivityManager().getActivity(mIdList.get(length-1));
          try{
              current.finish();
          }catch(Exception e){
              finish();
          }

      }
  }
}

So basically I need a little help understanding how to achieve the same interaction as in Instagram app.

Every kind of help is really appreciated!

Was it helpful?

Solution

In my case I used FragmentManager V4 from the android support library and tabhost with Fragments and did the things to work. If someone needs an example you can find it in the Android Developers blog or just search for Android Fragments Example on Google and you will find something useful. : )

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top