如何为Android活动进行代码重用?

时间:2012-02-11 12:37:37

标签: java android design-patterns

用于活动的代码重用令人困惑。在正常情况下,我们可以设计父活动并将所有常用方法放入其中。如下:

 public class BaseActivity extends Activity{
 @Override
  protected void doExit() {
     showDialog(DIALOG_EXIT_ALTER);
 }
 protected Dialog onCreateDialog(int id, Bundle args) {
     switch (id) {  
     case DIALOG_EXIT_ALTER:
     return new AlertDialog.Builder(BaseUIActivity.this)
         .setTitle("Exit?")
         .setPositiveButton("Yes",
                new DialogInterface.OnClickListener() {
                    public void onClick(
                            DialogInterface dialoginterface, int i) {
                    close();
                    }
                })
         .setNeutralButton("No",null).create();
     default:
     return null;
     }
 }
 protected void close() {
     finish();
 }
 }

然后其他活动扩展BaseActivity将显示alertdialog而不是在按下后退按钮时立即退出。 但在android框架中,有多个内置活动,如PreferenceActivity,ListActivity,ActivityGroup等。

如果我的活动扩展了那些活动,那么它就不能使用BaseActivity中定义的公共代码。因为Java的单一继承。 那么有没有其他方法建议在android中进行代码重用?

2 个答案:

答案 0 :(得分:2)

创建一个新的ActivityHelper类。

public class ActivityHelper {

    Activity activity;

    public ActivityHelper(Activity activity) {
        this.activity = activity;
    }

    public Dialog onCreateDialog(int id, Bundle args) {
        // do many usefull things
        return result;
    }
}

在您的所有活动中使用它。


    protected Dialog onCreateDialog(int id, Bundle args) {
        return activityHelper(id, args);
    }

答案 1 :(得分:1)

由于PreferenceActivityListActivityActivityGroupActivity的特殊形式,您必须在相关背景中使用它们。

因此,恕我直言的解决方法是拥有Base + [以上Activity全部]的一份副本,如果您必须在项目中多次使用它们,并扩展您的孩子ListActivity或者其他专业Activity