BaseActivity與BaseFragment的簡單封裝
在android開發中activity與fragment是每個專案最基本的類,所以對它們二者的封裝也是非常有必要的,今天就把這兩個類簡單的封裝一下。
1、activity的封裝
public abstract class BaseActivity extends AppCompatActivity implements OnClickListener{ @Override public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { // 設定全屏 this.getWindow().setFlags(LayoutParams.FLAG_FULLSCREEN, LayoutParams.FLAG_FULLSCREEN); super.onCreate(savedInstanceState, persistentState); setContentView(setLayout()); setView(); setData(); } /** * 繫結佈局 * @return */ protected abstract int setLayout(); /** * 初始化元件 */ protected abstract void setView(); /** * 設定資料等邏輯程式碼 */ protected abstract void setData(); /** * 簡化findViewById() * @param resId * @param* @return */ protected T fvbi(int resId){ return (T) findViewById(resId); } /** * Intent跳轉 * @param context * @param clazz */ protected void toClass(Context context,Class extends BaseActivity> clazz){ toClass(context,clazz,null); } /** * Intent帶值跳轉 * @param context * @param clazz * @param bundle */ protected void toClass(Context context, Class extends BaseActivity> clazz, Bundle bundle){ Intent intent = new Intent(context,clazz); intent.putExtras(bundle); startActivity(intent); } /** * 帶返回值的跳轉 * @param context * @param clazz * @param bundle * @param reuqestCode */ protected void toClass(Context context,Class extends BaseActivity> clazz,Bundle bundle,int reuqestCode){ Intent intent = new Intent(context,clazz); intent.putExtras(bundle); startActivityForResult(intent,reuqestCode); } }
在activity中的onCreate()方法,findviewbyid()方法,以及一些跳轉傳值等,這些都是經常要用到的,所以把這些方法都封裝在一起,用的時候能少寫一些重複的程式碼。
2、fragment的封裝 , fragment的封裝與activity類似
public abstract class BaseFragment extends Fragment implements OnClickListener{ protected Context mContext; /** * 當fragment與activity發生關聯時呼叫 * @param context 與之相關聯的activity */ @Override public void onAttach(Context context) { super.onAttach(context); mContext = context; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(setLayout(),null); return view; } /** * 繫結佈局 * @return */ protected abstract int setLayout(); @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initView(); } /** * 初始化元件 */ protected abstract void initView(); @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initData(); } /** * 設定資料等邏輯程式碼 */ protected abstract void initData(); /** * 簡化findViewById * @param resId * @param* @return */ protected T fvbi(int resId){ return (T) getView().findViewById(resId); } /** * intent跳轉 * @param context * @param clazz */ protected void toClass(Context context,Class extends BaseActivity> clazz){ toClass(context,clazz,null); } /** * intent帶值跳轉 * @param context * @param clazz * @param bundle */ protected void toClass(Context context,Class extends BaseActivity> clazz,Bundle bundle){ Intent intent = new Intent(context,clazz); intent.putExtras(bundle); context.startActivity(intent); } /** * 帶返回值的跳轉 * @param context * @param clazz * @param bundle * @param requestCode */ protected void toClass(Context context,Class extends BaseActivity> clazz,Bundle bundle,int requestCode){ Intent intent = new Intent(context,clazz); intent.putExtras(bundle); getActivity().startActivityForResult(intent,requestCode); } }
3、BaseActivity的使用
public class NextActivity extends BaseActivity{ private TextView mTextView; @Override protected int setLayout() { return R.layout.activity_main; } @Override protected void setView() { mTextView = fvbi(R.id.tv); mTextView.setOnClickListener(this); } @Override protected void setData() { mTextView.setText("who are you"); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.tv: toClass(NextActivity.this, MainActivity.class); break; } } }
4、BaseFragment的使用
public class TestFragment extends BaseFragment { private TextView mTextView; @Override protected int setLayout() { return R.layout.activity_main; } @Override protected void initView() { mTextView = fvbi(R.id.tv); mTextView.setOnClickListener(this); } @Override protected void initData() { mTextView.setText("fragment"); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.tv: toClass(mContext,MainActivity.class); break; } } }
上述的封裝,只是一些簡單的封裝,如果在專案中有一些其他的功能,幾乎是每個activity或fragment都會用到的話,就把它封裝在這兩個類裡。在剛學習的時候對於老師所講的封裝難以理解,即使知道了封裝的好處,也不知道該如何入手自己封裝,跟著老師封裝幾個,再多看看其他專案裡的或是其他大神封裝的例子之後,自己也就勉強可以封裝幾個簡單的類了。所謂熟讀唐詩三百首,不會作詩也會吟,多看看,多想想,見的多了,自然會有所體會。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2144/viewspace-2806116/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android 談談封裝那些事 –BaseActivity 和 BaseFragment(二)Android封裝Fragment
- Retrofit的簡單封裝封裝
- IQueryable的簡單封裝封裝
- Flutter Dio http簡單封裝與使用FlutterHTTP封裝
- Fetch API 簡單封裝API封裝
- 一個簡單的 Amqp 封裝MQ封裝
- Golang 對MongoDB的操作簡單封裝GolangMongoDB封裝
- JS棧結構的簡單封裝JS封裝
- 陣列常用方法的簡單封裝陣列封裝
- c# Quartz.net的簡單封裝C#quartz封裝
- 封裝一個簡單的日曆元件封裝元件
- iOS 基於FMDB簡單封裝iOS封裝
- 5-AVI–Fragment簡單封裝Fragment封裝
- MongoDB Python官方驅動 PyMongo 的簡單封裝MongoDBPython封裝
- python-對requests請求簡單的封裝Python封裝
- 封裝一個簡單的動畫函式封裝動畫函式
- SqlSugar 多資料來源的簡單封裝SqlSugar封裝
- 微信小程式wx.request的簡單封裝微信小程式封裝
- 我自己封裝的 Laravel 融雲 sdk,簡單好用封裝Laravel
- 基於Promise實現對Ajax的簡單封裝Promise封裝
- web自動化框架—BasePage 類的簡單封裝Web框架封裝
- 一個簡單vue.config.js配置和axios簡單封裝VueJSiOS封裝
- 小程式wx.request()方法簡單封裝封裝
- 在 vue-cil 裡封裝一個簡單的 axiosVue封裝iOS
- Kotlin中Retrofit網路請求簡單封裝Kotlin封裝
- 【資料結構與演算法】二叉搜尋樹的簡單封裝資料結構演算法封裝
- Flutter 封裝:富文字 RichText 極簡封裝Flutter封裝
- 封裝動態庫dll與靜態庫lib(原理及簡單例項)封裝單例
- 程式碼改變世界 | 如何封裝一個簡單的 Koa封裝
- 商城購物車加減控制元件的簡單封裝控制元件封裝
- canvas簡單封裝一個echarts實現不了的餅圖Canvas封裝Echarts
- 基於Vue.js封裝一個簡單的select元件Vue.js封裝元件
- LinkedList重寫(5)LinkedList簡單的封裝和增加泛型封裝泛型
- Flutter 熱門網路請求框架Dio的簡單封裝Flutter框架封裝
- 簡易Dialog封裝封裝
- 簡訊介面封裝封裝
- Vue封裝一個簡單輕量的上傳檔案元件Vue封裝元件
- Golang(Go語言)封裝一個簡單的控制檯輸出包Golang封裝