码迷,mamicode.com
首页 > 其他好文 > 详细

BaseActivity

时间:2016-05-07 13:14:21      阅读:329      评论:0      收藏:0      [点我收藏+]

标签:

技术分享
  1 public class BaseActivity<T> extends AppCompatActivity {
  2 
  3     /**
  4      * 获取T的名称,不能用getLocalClassName代替
  5      */
  6     @SuppressWarnings("unchecked")
  7     private String getCls() {
  8         Class<T> cls = (Class<T>) (((ParameterizedType) (this.getClass()
  9                 .getGenericSuperclass())).getActualTypeArguments()[0]);
 10 
 11         return cls.getSimpleName();
 12     }
 13 
 14     /**
 15      * 以下是生命周期,onCreate--->onDestroy
 16      */
 17     @Override
 18     protected void onCreate(Bundle savedInstanceState) {
 19         super.onCreate(savedInstanceState);
 20 
 21         init();
 22     }
 23 
 24     private void init() {
 25         // 写死竖屏
 26         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
 27 
 28         // 无actionBar
 29         requestWindowFeature(Window.FEATURE_NO_TITLE);
 30 
 31         // 跳转效果,不能放在initSkin后面
 32         // WindowUtils.initExplodeTrans(this);
 33 
 34         // 换肤操作
 35         // SkinUtils.initSkin(this);
 36 
 37     }
 38 
 39     /**
 40      * 有supportFragmentAttach的时候才会执行,当然也有Fragment的方法
 41      * 可以传一些数据进去
 42      */
 43     @Override
 44     public void onAttachFragment(Fragment fragment) {
 45         Log.e(getCls(), "--->onAttachSupportFragment");
 46         super.onAttachFragment(fragment);
 47     }
 48 
 49     /**
 50      * setContentView()或者addContentView()方法执行完毕时就会调用该方法
 51      * 可以在这里加载数据
 52      */
 53     @Override
 54     public void onContentChanged() {
 55         Log.e(getCls(), "--->onContentChanged");
 56         super.onContentChanged();
 57     }
 58 
 59     /**
 60      * singTop模式下,在栈顶的activity启动本身的时候是不会再onCreate的,
 61      * 也就不会接受到intent,所以需要在以下两种方法接受intent
 62      * 1.在onNewIntent里先setIntent再getIntent().getExtra();
 63      * 2.在onNewIntent里直接intent.getExtra();
 64      */
 65     @Override
 66     protected void onNewIntent(Intent intent) {
 67         Log.e(getCls(), "--->onNewIntent");
 68         super.onNewIntent(intent);
 69     }
 70 
 71     /**
 72      * activity完全不可见--->可见时,从这里开始生命周期
 73      */
 74     @Override
 75     protected void onRestart() {
 76         super.onRestart();
 77     }
 78 
 79     @Override
 80     protected void onStart() {
 81         super.onStart();
 82     }
 83 
 84     /**
 85      * 接受setResult回传的intent
 86      */
 87     @Override
 88     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 89         Log.e(getCls(), "--->onActivityResult");
 90         super.onActivityResult(requestCode, resultCode, data);
 91     }
 92 
 93     /**
 94      * onCreate和onRestoreInstanceState是接受Bundle的
 95      * onSaveInstanceState是finish时保存传送Bundle的
 96      */
 97     @Override
 98     public void onRestoreInstanceState(Bundle savedInstanceState) {
 99         Log.e(getCls(), "--->onRestoreInstanceState");
100         super.onRestoreInstanceState(savedInstanceState);
101     }
102 
103     /**
104      * 当Activity彻底运行起来之后回调onPostCreate方法 也就是onCreate执行完后
105      */
106     @Override
107     protected void onPostCreate(@Nullable Bundle savedInstanceState) {
108         Log.e(getCls(), "--->onPostCreate");
109         super.onPostCreate(savedInstanceState);
110     }
111 
112     /**
113      * activity部分不可见--->可见时,从这里开始生命周期
114      */
115     @Override
116     protected void onResume() {
117         super.onResume();
118     }
119 
120     /**
121      * onResume执行完后执行
122      */
123     @Override
124     protected void onPostResume() {
125         Log.e(getCls(), "--->onPostResume");
126         super.onPostResume();
127     }
128 
129     /**
130      * DecorView在这里才会有params,viewGroup在这里才能add
131      * <p/>
132      * Window是WindowManager最顶层的视图,PhoneWindow是Window的唯一实现类
133      * DecorView是window下的子视图,是所有应用窗口(Activity界面)的根View
134      * <p/>
135      * 这里可以控制DecorView的大小来控制activity的大小,可做窗口activity
136      * 窗口activity记得调用activity.setFinishOnTouchOutside哦
137      */
138     @Override
139     public void onAttachedToWindow() {
140         Log.e(getCls(), "--->onAttachedToWindow");
141         super.onAttachedToWindow();
142         // View decorView = getWindow().getDecorView();
143         // 设置 WindowManager.LayoutParams params
144         // getWindowManager().updateViewLayout(decorView, params);
145     }
146 
147     /**
148      * onCreateOptionsMenu:为什么不调用了?????那就不写了
149      * onPrepareOptionsMenu:每次在display Menu之前,都会去调用,
150      * <p/>
151      * 可以inflate(xml)或menu.add()来初始化Menu,动态变更时,需要首先调用menu.clear()
152      *
153      * @return 捕获返回true, 返回false不会显示menu菜单,包括actionbar
154      */
155     @Override
156     public boolean onPrepareOptionsMenu(Menu menu) {
157         Log.e(getCls(), "--->onPrepareOptionsMenu");
158         return super.onPrepareOptionsMenu(menu);
159     }
160 
161     /**
162      * 从这里开始就代表被遮挡了
163      */
164     @Override
165     protected void onPause() {
166         super.onPause();
167     }
168 
169     /**
170      * 如果是人为关闭Activity或者Fragment, onSaveInstanceState() 并不会被调用.
171      * onSaveInstanceState() 只有在系统即将要自动清理销毁Activity或Fragment前才会调用, 比如
172      * 1, 由于重力感应 手机从竖屏变为横屏,
173      * 2, 手机点击Home键和长按Home键
174      * 3, 点击电源键锁屏时
175      * 4, 从当前Activity跳到另一个Activity
176      * 5, 应用内存不足即将自动销毁时等情况
177      * 即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用
178      * 6, recreate之后也会调用的,配合起来可以做主题更换功能
179      */
180     @Override
181     protected void onSaveInstanceState(Bundle outState) {
182         Log.e(getCls(), "--->onSaveInstanceState");
183         super.onSaveInstanceState(outState);
184         // 这里执行一些额外存放数据的方法,然后也可以reCreate之后,在onCreate里读取
185         // outState.putInt("skin",-1);
186     }
187 
188     @Override
189     protected void onStop() {
190         super.onStop();
191     }
192 
193     /**
194      * DecorView到这里没有params,viewGroup在这里之前remove
195      */
196     @Override
197     public void onDetachedFromWindow() {
198         super.onDetachedFromWindow();
199     }
200 
201     /**
202      * 生命周期结束并不等于对象销毁,其他方法还是可以调用的
203      */
204     @Override
205     protected void onDestroy() {
206         super.onDestroy();
207     }
208 
209     /**
210      * >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>以上是生命周期<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
211      * <p/>
212      * 触发条件:屏幕方向,uiMode,体统字体,屏幕布局,软键盘伸缩,用户所在地区等改变的时候。
213      * 捕获以上事件需要做以下几步:
214      * 1.<uses-permission Android:name="android.permission.CHANGE_CONFIGURATION"/>
215      * 2.在manifest中activity节点中声明android:configChanges="这里是你要捕获的触发条件类型"
216      * 3.重写onConfigurationChanged方法。
217      * 比如捕获了横竖屏切换,体统将不会重启activity,而是走onConfigurationChanged中的操作
218      */
219     @Override
220     public void onConfigurationChanged(Configuration newConfig) {
221         super.onConfigurationChanged(newConfig);
222         Log.e(getCls(), "onConfigurationChanged");
223         if (newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
224             Log.e(getCls(), "onConfigurationChanged--->竖屏");
225         } else if (newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
226             Log.e(getCls(), "onConfigurationChanged--->横屏");
227         }
228     }
229 
230     /**
231      * 触摸事件分发
232      */
233     @Override
234     public boolean dispatchTouchEvent(MotionEvent ev) {
235         Log.e(getCls(), "dispatchTouchEvent--->action:" + ev.getAction());
236         return super.dispatchTouchEvent(ev);
237     }
238 
239     /**
240      * 按键事件分发
241      */
242     @Override
243     public boolean dispatchKeyEvent(KeyEvent event) {
244         Log.e(getCls(), "dispatchKeyEvent--->action:" + event.getAction());
245         return super.dispatchKeyEvent(event);
246     }
247 
248     /**
249      * 事件拦截, ViewGroup的事件拦截是onInterceptTouchEvent
250      */
251     @Override
252     public void onUserInteraction() {
253         //Log.e(getCls(), "onUserInteraction"); 太多了 消了
254         super.onUserInteraction();
255     }
256 
257     /**
258      * 触摸事件处理
259      */
260     @Override
261     public boolean onTouchEvent(MotionEvent event) {
262         Log.e(getCls(), "onTouchEvent--->action:" + event.getAction());
263         return super.onTouchEvent(event);
264     }
265 
266     /**
267      * 按键事件处理 ,menu、back、home三种事件
268      */
269     @Override
270     public boolean onKeyDown(int keyCode, KeyEvent event) {
271         Log.e(getCls(), "onKeyDown--->action:" + event.getAction());
272         return super.onKeyDown(keyCode, event);
273     }
274 
275     /**
276      * 按键事件处理 ,menu、back、home三种事件
277      */
278     @Override
279     public boolean onKeyUp(int keyCode, KeyEvent event) {
280         Log.e(getCls(), "onKeyUp--->action:" + event.getAction());
281         return super.onKeyUp(keyCode, event);
282     }
283 
284     /**
285      * 按键事件处理 ,menu、back、home三种事件
286      */
287     @Override
288     public boolean onKeyLongPress(int keyCode, KeyEvent event) {
289         Log.e(getCls(), "onKeyLongPress--->action:" + event.getAction());
290         return super.onKeyLongPress(keyCode, event);
291     }
292 
293     /**
294      * 菜单打开时
295      */
296     @Override
297     public boolean onMenuOpened(int featureId, Menu menu) {
298         Log.e(getCls(), "onMenuOpened");
299         return super.onMenuOpened(featureId, menu);
300     }
301 
302     /**
303      * 选项菜单点击回调, 也可使用监听器 menuItem.setOnMenuItemClickListener();
304      */
305     @Override
306     public boolean onOptionsItemSelected(MenuItem item) {
307         Log.e(getCls(), "onOptionsItemSelected--->" + item.getTitle());
308         switch (item.getItemId()) {
309             case android.R.id.home:
310                 onBackPressed();
311                 return true;
312         }
313         return super.onOptionsItemSelected(item);
314     }
315 
316     /**
317      * 在选项菜单关闭时被调用
318      */
319     @Override
320     public void onOptionsMenuClosed(Menu menu) {
321         Log.e(getCls(), "onOptionsMenuClosed");
322         super.onOptionsMenuClosed(menu);
323     }
324 
325     /**
326      * 创建上下文菜单
327      */
328     @Override
329     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
330         Log.e(getCls(), "onCreateContextMenu");
331         super.onCreateContextMenu(menu, v, menuInfo);
332     }
333 
334     /**
335      * 监听上下文菜单选项事件,item.getMenuInfo()获取每个item的position
336      */
337     @Override
338     public boolean onContextItemSelected(MenuItem item) {
339         Log.e(getCls(), "onContextItemSelected--->" + item.getTitle());
340         return super.onContextItemSelected(item);
341     }
342 
343     /**
344      * 上下文菜单关闭时调用
345      */
346     @Override
347     public void onContextMenuClosed(Menu menu) {
348         Log.e(getCls(), "onContextMenuClosed");
349         super.onContextMenuClosed(menu);
350     }
351 
352     /**
353      * 相当于KeyEvent.KEYCODE_BACK 返回键 , 相当于menu的返回事件
354      */
355     @Override
356     public void onBackPressed() {
357         Log.e(getCls(), "onBackPressed");
358         super.onBackPressed();
359     }
360 
361     /**
362      * 将要进入后台(background)时被回调
363      */
364     @Override
365     protected void onUserLeaveHint() {
366         Log.e(getCls(), "onUserLeaveHint");
367         super.onUserLeaveHint();
368     }
369 
370     /**
371      * 在window执行动画的时候activity不能draw,所以就有了下面的方法
372      */
373     @Override
374     public void onEnterAnimationComplete() {
375         Log.e(getCls(), "onEnterAnimationComplete");
376         super.onEnterAnimationComplete();
377     }
378 
379     /**
380      * 有attach的fragment时,当fragment也Resume时被回调
381      * 最好在这里执行已经存在的fragment的transaction操作
382      */
383     @Override
384     protected void onResumeFragments() {
385         Log.e(getCls(), "onResumeFragments");
386         super.onResumeFragments();
387     }
388 
389     /**
390      * 焦点变化
391      */
392     @Override
393     public void onWindowFocusChanged(boolean hasFocus) {
394         Log.e(getCls(), "onWindowFocusChanged--->" + hasFocus);
395         super.onWindowFocusChanged(hasFocus);
396     }
397 
398     /**
399      * title改变时
400      */
401     @Override
402     protected void onTitleChanged(CharSequence title, int color) {
403         Log.e(getCls(), "onTitleChanged--->" + title);
404         super.onTitleChanged(title, color);
405     }
406 
407     /**
408      * 成功执行onSupportNavigateUp并且当前activityFinish的时候
409      */
410     @Override
411     public boolean onSupportNavigateUp() {
412         Log.e(getCls(), "onSupportNavigateUp");
413         return super.onSupportNavigateUp();
414     }
415 
416 }
View Code

 

BaseActivity

标签:

原文地址:http://www.cnblogs.com/gg1992/p/5467835.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!