いくつかのアプリケーションでは、アプリケーション内のすべてのアクティビティまたはほとんどのアクティビティにグローバル機能を追加する必要がある場合がありますメニューを使用して環境設定アクティビティーを起動するか、グローバルナビゲーションバーを扱う機能を追加します)。私は、Activity、ListActivites、TabActiviesなどに最小限のコード複製で同じ機能を追加する必要があることに対処するために、以下のようなものを作成することに取り掛かりましたが、コードの厄介な量があります。それ以外の場合は、すべてのアクティビティ、およびのサブクラスにコールを追加することなく、すべての画面に機能を追加することができます。誰かがより良いアプローチを提案できますか?Activity、ListActivity、TabActivityなどにグローバル機能を追加する
public class CoreBaseActivity {
/**
* Used in options menu to launch preferences activity
*/
public final static int MENU_PREFERENCES = 0x00;
public static boolean onCreateOptionsMenu(Menu menu, Context context) {
menu.add(0, MENU_PREFERENCES, 0, context.getString(R.string.preferences));
return true;
}
private static boolean onOptionsItemSelected(MenuItem item, Context context) {
switch (item.getItemId()) {
case MENU_PREFERENCES:
//launch preference activity
break;
}
return true;
}
public static void overrideTransition(Activity activity) {
activity.overridePendingTransition(0, R.anim.fade_out);
}
public static void initGlobalNav(final Activity activity) {
if (activity.findViewById(R.id.footer_bar) != null) {
// add global nav button click listeners
}
}
public static class BaseActivity extends Activity {
protected Context mContext;
protected AppState mAppState;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getApplicationContext();
mAppState = (AppState) getApplication();
}
@Override
public void setContentView(int layoutResID) {
super.setContentView(layoutResID);
CoreBaseActivity.initGlobalNav(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return CoreBaseActivity.onCreateOptionsMenu(menu, mContext);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return CoreBaseActivity.onOptionsItemSelected(item, mContext);
}
@Override
public void startActivity(Intent intent) {
CoreBaseActivity.overrideTransition(this);
super.startActivity(intent);
}
public void startActivityNoTransition(Intent intent) {
super.startActivity(intent);
}
@Override
public void onPause() {
CoreBaseActivity.overrideTransition(this);
super.onPause();
}
}
public static class BaseListActivity extends ListActivity {
protected Context mContext;
protected AppState mAppState;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getApplicationContext();
mAppState = (AppState) getApplication();
}
@Override
public void setContentView(int layoutResID) {
super.setContentView(layoutResID);
CoreBaseActivity.initGlobalNav(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return CoreBaseActivity.onCreateOptionsMenu(menu, mContext);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return CoreBaseActivity.onOptionsItemSelected(item, mContext);
}
@Override
public void startActivity(Intent intent) {
CoreBaseActivity.overrideTransition(this);
super.startActivity(intent);
}
public void startActivityNoTransition(Intent intent) {
super.startActivity(intent);
}
@Override
public void onPause() {
CoreBaseActivity.overrideTransition(this);
super.onPause();
}
}
public static class BaseTabActivity extends TabActivity {
protected Context mContext;
protected AppState mAppState;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getApplicationContext();
mAppState = (AppState) getApplication();
}
@Override
public void setContentView(int layoutResID) {
super.setContentView(layoutResID);
CoreBaseActivity.initGlobalNav(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return CoreBaseActivity.onCreateOptionsMenu(menu, mContext);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return CoreBaseActivity.onOptionsItemSelected(item, mContext);
}
@Override
public void startActivity(Intent intent) {
CoreBaseActivity.overrideTransition(this);
super.startActivity(intent);
}
public void startActivityNoTransition(Intent intent) {
super.startActivity(intent);
}
@Override
public void onPause() {
CoreBaseActivity.overrideTransition(this);
super.onPause();
}
}
}
うわー - これを行うにはいい方法がないようです。 – Martyn