【问题标题】:How to do code reuse for android activities?如何为android活动做代码重用?
【发布时间】:2012-02-11 12:37:37
【问题描述】:

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

 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 将显示一个警报对话框,而不是在按下返回按钮时立即退出。 但在android框架中,内置的活动不止一种,如PreferenceActivity、ListActivity、ActivityGroup等。

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

【问题讨论】:

    标签: java android design-patterns


    【解决方案1】:

    创建一个新类ActivityHelper。

    公共类 ActivityHelper { 活动活动; 公共ActivityHelper(活动活动){ this.activity = 活动; } 公共对话 onCreateDialog(int id, Bundle args) { // 做很多有用的事情 返回结果; } }

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

    受保护的对话 onCreateDialog(int id, Bundle args) { 返回活动助手(id,args); }

    【讨论】:

    【解决方案2】:

    由于PreferenceActivityListActivityActivityGroupActivity 的特殊形式,因此您必须在它们的相关上下文中使用它们。

    所以恕我直言,解决方法是拥有一份Base+[以上所有Activity],如果您必须在项目中多次使用它们,并扩展您的孩子ListActivity 或任何专业Activity是的。

    【讨论】: