2.抽取代码(BaseActivity)

1.抽取BaseActivity   管理所有activity 方便退出

  1. public class BaseActivity extends ActionBarActivity {
  2. // 管理运行的所有的activity
  3. public final static List<BaseActivity> mActivities = new LinkedList<BaseActivity>();//增删快
  4. //使用广播也可以,如果当前Activity想退出可以,sendReceiver
  5. // private KillAllReceiver receiver;
  6. // private class KillAllReceiver extends BroadcastReceiver{
  7. //
  8. // @Override
  9. // public void onReceive(Context context, Intent intent) {
  10. // finish();
  11. // }
  12. // }
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. // receiver=new KillAllReceiver();
  17. // IntentFilter filter=new IntentFilter("com.itheima.google.killall");
  18. // registerReceiver(receiver, filter);
  19. //解决同步问题,不可以添加的时候删除
  20. synchronized (mActivities) {
  21. mActivities.add(this);
  22. }
  23. init();//定义几个方法子类去实现,代码不臃肿,这个是初始化view前的操作
  24. initView();
  25. initActionBar();
  26. }
  27. @Override
  28. protected void onDestroy() {
  29. super.onDestroy();
  30. synchronized (mActivities) {
  31. mActivities.remove(this);
  32. }
  33. // if(receiver!=null){
  34. // unregisterReceiver(receiver);
  35. // receiver=null;
  36. // }
  37. }
  38. public void killAll() {
  39. // 复制了一份mActivities 集合,因为不能在操作mActivities 的时候去遍历,就是这样复制的
  40. List<BaseActivity> copy;
  41. synchronized (mActivities) {
  42. copy = new LinkedList<BaseActivity>(mActivities);
  43. }
  44. for (BaseActivity activity : copy) {
  45. activity.finish();
  46. }
  47. // 杀死当前的进程
  48. android.os.Process.killProcess(android.os.Process.myPid());
  49. }
  50. protected void initActionBar() {
  51. }
  52. protected void initView() {
  53. }
  54. protected void init() {
  55. }
  56. }

2.MainActivity

  1. public class MainActivity extends BaseActivity implements
  2. OnQueryTextListener {
  3. private DrawerLayout mDrawerLayout;
  4. private ActionBarDrawerToggle drawerToggle;
  5. private ViewPager mViewPager;
  6. private PagerTabStrip pager_tab_strip;
  7. private String[] tab_names; // 标签的名字
  8. @Override
  9. protected void initActionBar() {
  10. ActionBar actionBar = getSupportActionBar();
  11. actionBar.setDisplayHomeAsUpEnabled(true);
  12. actionBar.setHomeButtonEnabled(true);
  13. drawerToggle = new ActionBarDrawerToggle(this,
  14. mDrawerLayout, R.drawable.ic_drawer_am, R.string.open_drawer,
  15. R.string.close_drawer){
  16. @Override
  17. public void onDrawerClosed(View drawerView) {
  18. super.onDrawerClosed(drawerView);
  19. Toast.makeText(getApplicationContext(), "抽屉关闭了", 0).show();
  20. }
  21. @Override
  22. public void onDrawerOpened(View drawerView) {
  23. super.onDrawerOpened(drawerView);
  24. Toast.makeText(getApplicationContext(), "抽屉打开了", 0).show();
  25. }
  26. };
  27. mDrawerLayout.setDrawerListener(drawerToggle);
  28. // 让开关和actionbar建立关系
  29. drawerToggle.syncState();
  30. }
  31. @Override
  32. protected void init() {
  33. tab_names = UiUtils.getStringArray(R.array.tab_names);
  34. }
  35. @Override
  36. protected void initView() {
  37. setContentView(R.layout.activity_main);
  38. mDrawerLayout = (DrawerLayout) findViewById(R.id.dl);
  39. mViewPager=(ViewPager) findViewById(R.id.vp);
  40. pager_tab_strip=(PagerTabStrip) findViewById(R.id.pager_tab_strip);
  41. // 设置标签下划线的颜色
  42. pager_tab_strip.setTabIndicatorColor(getResources().getColor(R.color.indicatorcolor));
  43. mViewPager.setAdapter(new MainAdpater(getSupportFragmentManager()));
  44. //sendBroadcast(new Intent("com.itheima.google.killall"));
  45. //Log.i(tag, msg)
  46. }
  47. private class MainAdpater extends FragmentStatePagerAdapter{
  48. public MainAdpater(FragmentManager fm) {
  49. super(fm);
  50. }
  51. // 每个条目返回的fragment
  52. // 0
  53. @Override
  54. public Fragment getItem(int position) {
  55. // 通过Fragment工厂 生产Fragment
  56. return FragmentFactory.createFragment(position);
  57. }
  58. // 一共有几个条目
  59. @Override
  60. public int getCount() {
  61. return tab_names.length;
  62. }
  63. // 返回每个条目的标题
  64. @Override
  65. public CharSequence getPageTitle(int position) {
  66. return tab_names[position];
  67. }
  68. }
  69. @SuppressLint("NewApi")
  70. @Override
  71. public boolean onCreateOptionsMenu(Menu menu) {
  72. getMenuInflater().inflate(R.menu.activity_main, menu);
  73. // 如果运行的环境 (部署到什么版本的手机 )大于3.0
  74. if (android.os.Build.VERSION.SDK_INT > 11) {
  75. SearchView searchView = (SearchView) menu.findItem(
  76. R.id.action_search).getActionView();
  77. searchView.setOnQueryTextListener(this);// 搜索的监听
  78. }
  79. return true;
  80. }
  81. /** 处理actionBar菜单条目的点击事件 */
  82. public boolean onOptionsItemSelected(MenuItem item) {
  83. if (item.getItemId() == R.id.action_search) {
  84. Toast.makeText(getApplicationContext(), "搜索", 0).show();
  85. }
  86. return drawerToggle.onOptionsItemSelected(item)|super.onOptionsItemSelected(item);
  87. }
  88. // 当搜索提交的时候
  89. @Override
  90. public boolean onQueryTextSubmit(String query) {
  91. Toast.makeText(getApplicationContext(), query, 0).show();
  92. return true;
  93. }
  94. // 当搜索的文本发生变化
  95. @Override
  96. public boolean onQueryTextChange(String newText) {
  97. return true;
  98. }
  99. }

3.UiUtils

  1. public class UiUtils {
  2. /**
  3. * 获取到字符数组
  4. * @param tabNames 字符数组的id
  5. */
  6. public static String[] getStringArray(int tabNames) {
  7. return getResource().getStringArray(tabNames);
  8. }
  9. public static Resources getResource() {
  10. return BaseApplication.getApplication().getResources();
  11. }
  12. /** dip转换px */
  13. public static int dip2px(int dip) {
  14. final float scale = getResource().getDisplayMetrics().density;
  15. return (int) (dip * scale + 0.5f);
  16. }
  17. /** pxz转换dip */
  18. public static int px2dip(int px) {
  19. final float scale = getResource().getDisplayMetrics().density;
  20. return (int) (px / scale + 0.5f);
  21. }
  22. }

这样定义数组:string.xml里

  1. <string-array name="tab_names">
  2. <item>首页</item>
  3. <item>应用</item>
  4. <item>游戏</item>
  5. <item>专题</item>
  6. <item>分类</item>
  7. <item>排行</item>
  8. </string-array>

4.FragmentFactory

  1. public class FragmentFactory {
  2. private static Map<Integer, Fragment> mFragments = new HashMap<Integer, Fragment>();
  3. public static Fragment createFragment(int position) {
  4. Fragment fragment = null;
  5. fragment = mFragments.get(position); //在集合中取出来Fragment
  6. if (fragment == null) { //如果再集合中没有取出来 需要重新创建
  7. if (position == 0) {
  8. fragment = new HomeFragment();
  9. } else if (position == 1) {
  10. fragment = new AppFragment();
  11. } else if (position == 2) {
  12. fragment = new GameFragment();
  13. } else if (position == 3) {
  14. fragment = new SubjectFragment();
  15. } else if (position == 4) {
  16. fragment = new CategoryFragment();
  17. } else if (position == 5) {
  18. fragment = new TopFragment();
  19. }
  20. if (fragment != null) {
  21. mFragments.put(position, fragment);// 把创建好的Fragment存放到集合中缓存起来
  22. }
  23. }
  24. return fragment;
  25. }
  26. }

通过这样获取上下文,就不需要在createFragment里把content参数里传进去了,当然需要在清单文件里写name

  1. /**
  2. * 代表当前应用程序
  3. * @author itcast
  4. *
  5. */
  6. public class BaseApplication extends Application {
  7. private static BaseApplication application;
  8. @Override
  9. public void onCreate() {
  10. super.onCreate();
  11. application=this;
  12. }
  13. public static Context getApplication() {
  14. return application;
  15. }
  16. }

来自为知笔记(Wiz)

时间: 2024-10-20 09:58:26

2.抽取代码(BaseActivity)的相关文章

抽取代码的编程思想

package com.ys.xiangmu1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; /* * @作者   邓聪(小细节请自行补充) *这个方法是一气呵成的,从数据库连接到数据保存到数据库到关闭连接 * 这样做明显很多缺陷 * 当save方法很多的时候,每个save方法都要写同样的代码(获取连接对象和释放连接) * 所以可以把建立连接和释放资源的

利用eclipse抽取 代码片段为方法

选取要被抽取成方法的代码片段,右键->Refactor--->Extract Method 填写方法名称     抽取后成了这个样子:

转有关代码重构

转自:http://blog.csdn.net/weiky626/article/details/1602691 开发人员可能听到过"bad smell"这个词,这个词用在软件编码中是什么意思呢? 代码还有smell吗?当然没有,正如计算机病毒,bug等词一样,这只是个形象的说法.这个词在这里的意思是代码实现了需求,但是代码却不精炼,冗余,结构混乱,难读懂,难维护,难扩展等等.与之相对应的一个词是"refactor",即代码重构.我们在看些外国人写的程序时可以发现,

HDFS的Java客户端操作代码(HDFS的查看、创建)

1.HDFS的put上传文件操作的java代码: 1 package Hdfs; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.net.URI; 7 8 import org.apache.hadoop.conf.Configuration; 9 import org.apache.hadoop.fs.F

关于代码重构

最近几天实习做需求,很多都是代码优化,代码重构方面的,有必要阅读相关的文章或书籍,整理整理形成点小方法论指导受用. 相关不错的文章:代码重构之道 代码重构方向原则指导 重构代码的7个阶段 书籍——<重构:改善既有代码的设计> 可以在哪些方面对代码进行重构: 1.重命名:对类,接口,方法,属性等重命名,以使得更易理解 2.抽取代码:将方法内的一段代码抽取为另一个方法,以使得该段代码可以被其他方法调用,这是重构中很重要很常用的,此举可以极大的精炼代码,减少方法的代码行数 3.封装字段:将类的某个字

编写可读代码的艺术笔记

编写可读代码的艺术 表面层次上的改进 命名.注释以及审美--可以用于代码库每一行的小提示. 简化循环和逻辑 在程序中定义循环.逻辑和变量,从而使得代码更容易理解. 重新组织你的代码 在更高层次上组织大的代码块以及在功能层次上解决问题的方法. 精选话题 把"易于理解"的思想应用于测试以及大数据结构代码的例子. 第1章:代码应当易于理解 1.代码应当易于理解. 2.代码的写法应当使别人理解它所需的时间最小化. 第一部分:表面层次的改进 第2章:把信息装到名字里 1.使用专业的单词. 2.避

编写可读性代码的艺术

在做IT的公司里,尤其是软件开发部门,一般不会要求工程师衣着正式.在我工作过的一些环境相对宽松的公司里,很多程序员的衣着连得体都算不上(搞笑的T恤.短裤.拖鞋或者干脆不穿鞋).我想,我本人也在这个行列里面.虽然我现在改行做软件开发方面的咨询工作,但还是改不了这副德性.衣着体面的其中一个积极方面是它体现了对周围人的尊重,以及对所从事工作的尊重.比如,那些研究市场的人要表现出对客户的尊重.而大多数程序员基本上每天主要的工作就是和其他程序员打交道.那么这说明程序员之间就不用互相尊重吗?而且也不用尊重自

方法模版模式(设计模式_11)【精品博客】

今天给大家介绍的是:模版方法模式,这个模式非常的常见,很多开发者,无意中其实就已经用到了,也非常简单,只是还不知道,这属于一种设计模式而已,而关于这个设计模式,在网上有很多专业性词语来说明,看的人审美疲劳. 其实这个设计模式,通俗易懂的来讲,就是把子类重复的东西,定义到父类中模块化起来,父类只需要去管理好算法流程框架,把经常变化的点,让子类去继承完成. 我们看下面几道案例来理解就OK了: 案例一: 在很久很久以前,有一个小山村,住在这里面的小朋友上学无比困难,因为这个小村庄太过于偏僻,像是被大山

java脚本语言学习心得

第一篇技术博客,一定要认真! 第一篇技术博客,一定要认真! 第一篇技术博客,一定要认真! 好了,进入正题: 一 什么是脚本语言? 程序的运行方式有两种:编译运行和解释运行 1.1 前者的典型代表是java, 从文件角度看分为三步: write[编写]: a.java文件(拿个记事本就能写,扩展名是.java), compile[编译]: 编译(cmd命令是java a.java,ide集成了编译器运行之前自动编译)之后产生了a.class文件(是一堆二进制码,人看不懂,是给虚拟机看的) 运行[r