2012-02-11 18 views
1

代碼重用的活動令人困惑。在正常情況下,我們可以設計一個家長活動,並將所有常見方法放入其中。如下:如何爲android活動執行代碼重用?

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等。

如果我的活動擴展這些活動的話,就不能使用Java中的BaseActivity.because的單繼承定義的公共代碼。 那麼有沒有其他的方式推薦在android中執行代碼重用?

回答

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

ActivityHelper將是你可以在這裏找到一個詳細的例子一個很好的解決方案:http://iosched.googlecode.com/hg/android/src/com/google/android/apps/iosched/util/ActivityHelper.java 檢查整個項目,查看鏈接http://code.google.com/p/iosched/ – 2012-02-11 21:05:58

+0

+1的流程,並且ActivityHelper是一個不錯的解決方案。 – DouO 2012-02-12 06:16:14

1

由於PreferenceActivityListActivityActivityGroupActivity特殊形式,你必須在它們的相對上下文中使用它們。

所以恕我直言,解決辦法是有Base +以上所有Activity]如果你有使用它們一個以上的時間在你的項目中的一個副本,並延長你的孩子ListActivity或任何專門Activity它。

+0

是的,這是一個解決方案,但它是普通的一。 – DouO 2012-02-12 06:13:05