Tuesday, January 17, 2012

Common Code for Activity and PreferenceActivity


I'm using common code in my Activity like this:




abstract class CommonCode extends Activity {
//Common Code here...
}



then in my "Activity" I extend CommonCode instead of Activity and it all works fine.



My problem arise when I try to use commoncode in a PreferenceActivity, I tried:




abstract class CommonCode extends Activity {

class CommonCodePreferences extends PreferenceActivity {

}
//Common Code here...
}



but it isn't right.



How can I do it?

2 comments:

  1. I usually have one each since you can't mess with the existing hierarchy of the base classes.

    For example, I have an ActivityBase, ServiceBase, ListActivityBase, etc. If you want to have common code that they all use, I would suggest using composition - each of your base classes has a single instance of your CommonCode class or something to that effect. Another possibility is to use static methods and/or use a custom Application class (requires declaring the custom Application class in the manifest in the name attribute of the application element)

    ReplyDelete
  2. May I suggest that you prefer composition over inheritance and do something like this:

    abstract class CommonCode {

    Activity parent;

    public CommonCode(Activity activity) {
    parent = activity;
    }

    }

    class MyActivity extends Activity {

    CommonCode commonCode;

    public MyActivity() {
    commonCode = new CommonCode(this);
    }

    }


    This is a little more code to write in each activity, but it has a lot of advantages:


    It can also easily handle PreferenceActivity and other classes
    It is easier to test and mock

    ReplyDelete