在對Activity基類的封裝中,我做了什麼,activity基類封裝
在開發實踐中,不同Activity有許多代碼是重複冗餘的,因此很有必要將這部分抽取出來,封裝一個繼承自Activity的類,命名為BaseActivity。
翻看之前寫過的代碼,起初,BaseActivity僅僅用來做了一個友盟統計,每個Activity的onPause與onResume方法進行了重寫,基於此記錄了頁面使用的相關資料,代碼如下:
public class BaseActivity extends Activity {protected String Tag;protected Context mContext;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Tag = this.getClass().getSimpleName();mContext = this;}@Overrideprotected void onResume() {super.onResume();MobclickAgent.onResume(this);}@Overrideprotected void onPause() {super.onPause();MobclickAgent.onPause(this);}}接下來發現,除了這個,還有很多工作可以放在BaseActivity中來做,節省大量的人力物力。
其中,Toast是非常非常常見的一個簡單提示控制項,在學習後,最初是這樣使用的:
//需要進行顯示一個ToastToast.makeText(this, "Hello", Toast.LENGTH_SHORT).show();
後來發現每次寫太麻煩,不如將其封裝為一個工具類當中,其中借鑒各位大神的封裝模式:
public class T{private T(){/* cannot be instantiated */throw new UnsupportedOperationException("cannot be instantiated");}public static boolean isShow = true;public static void showShort(Context context, CharSequence message){if (isShow)Toast.makeText(context, message, Toast.LENGTH_SHORT).show();}public static void showShort(Context context, int message){if (isShow)Toast.makeText(context, message, Toast.LENGTH_SHORT).show();}public static void showLong(Context context, CharSequence message){if (isShow)Toast.makeText(context, message, Toast.LENGTH_LONG).show();}public static void showLong(Context context, int message){if (isShow)Toast.makeText(context, message, Toast.LENGTH_LONG).show();}}每次使用時,可以少些一個參數,顯示的時間略。
一段時間過後,將這個顯示Toast方法封裝在Activity中,是否會更加優雅,於是乎:
public class BaseActivity extends Activity { //...add new method protected void showShortToast(String msg) { Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); }}
在繼承BaseActivity後,每次顯示Toast豈不是很方便?
舉一反一,其他常用UI控制項同樣可以進行封裝。
在有的項目中,使用了像UIL第三方的圖片載入庫,同樣可以進行封裝,也在一定程度減少了很多代碼量,如:
public class ImageLoaderBaseActivity extends BaseActivity {protected DisplayImageOptions options;protected ImageLoader imageLoader;protected void onCreate(Bundle savedInstanceState) {options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.bg_pic_loading).showImageForEmptyUri(R.drawable.ic_launcher).showImageOnFail(R.drawable.ic_launcher).cacheInMemory(true).cacheOnDisc(true).considerExifParams(false).imageScaleType(ImageScaleType.EXACTLY_STRETCHED).bitmapConfig(Bitmap.Config.RGB_565).resetViewBeforeLoading(false)// 設定圖片在下載前是否重設,複位.build();// 構建完成imageLoader = ImageLoader.getInstance();imageLoader.init(ImageLoaderConfiguration.createDefault(this));};}
其實,隱藏ActionBar也可放在BaseActivity裡面。
除此,還有好多,希望能起到拋磚引玉的作用,大家一起來討論!
博主新人,還請各位大神輕拍。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。