知识点
  • 俩种退出程序的方法
  • 复制集合
  • 同步的用法
  • 字符数组
  • 工厂模式,生产fatgment,解决了碎片重复创建的问题
  • 全局上下文
  • actionbar用法
  • fargmentadapter,当viewpager里是fargment的话更方便

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

  1. public class BaseActivity extends ActionBarActivity {// 管理运行的所有的activitypublic final static List<BaseActivity> mActivities = new LinkedList<BaseActivity>();//增删快//使用广播也可以,如果当前Activity想退出可以,sendReceiver
    //  private KillAllReceiver receiver;
    //  private class KillAllReceiver extends BroadcastReceiver{
    //
    //      @Override
    //      public void onReceive(Context context, Intent intent) {
    //          finish();
    //      }
    //  }@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
    //      receiver=new KillAllReceiver();
    //      IntentFilter filter=new IntentFilter("com.itheima.google.killall");
    //      registerReceiver(receiver, filter);//解决同步问题,不可以添加的时候删除synchronized (mActivities) {mActivities.add(this);}init();//定义几个方法子类去实现,代码不臃肿,这个是初始化view前的操作initView();initActionBar();}@Overrideprotected void onDestroy() {super.onDestroy();synchronized (mActivities) {mActivities.remove(this);}
    //      if(receiver!=null){
    //          unregisterReceiver(receiver);
    //          receiver=null;
    //      }}public void killAll() {// 复制了一份mActivities 集合,因为不能在操作mActivities 的时候去遍历,就是这样复制的List<BaseActivity> copy;synchronized (mActivities) {copy = new LinkedList<BaseActivity>(mActivities);}for (BaseActivity activity : copy) {activity.finish();}// 杀死当前的进程android.os.Process.killProcess(android.os.Process.myPid());}protected void initActionBar() {}protected void initView() {}protected void init() {}
    }

2.MainActivity 
public class MainActivity extends BaseActivity implementsOnQueryTextListener {private DrawerLayout mDrawerLayout;private ActionBarDrawerToggle drawerToggle;private ViewPager mViewPager;private PagerTabStrip pager_tab_strip;private String[] tab_names;  // 标签的名字@Overrideprotected void initActionBar() {ActionBar actionBar = getSupportActionBar();actionBar.setDisplayHomeAsUpEnabled(true);actionBar.setHomeButtonEnabled(true);drawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout, R.drawable.ic_drawer_am, R.string.open_drawer,R.string.close_drawer){@Overridepublic void onDrawerClosed(View drawerView) {super.onDrawerClosed(drawerView);Toast.makeText(getApplicationContext(), "抽屉关闭了", 0).show();}@Overridepublic void onDrawerOpened(View drawerView) {super.onDrawerOpened(drawerView);Toast.makeText(getApplicationContext(), "抽屉打开了", 0).show();}};mDrawerLayout.setDrawerListener(drawerToggle);//  让开关和actionbar建立关系 drawerToggle.syncState();}@Overrideprotected void init() {tab_names = UiUtils.getStringArray(R.array.tab_names);}@Overrideprotected void initView() {setContentView(R.layout.activity_main);mDrawerLayout = (DrawerLayout) findViewById(R.id.dl);mViewPager=(ViewPager) findViewById(R.id.vp);pager_tab_strip=(PagerTabStrip) findViewById(R.id.pager_tab_strip);//  设置标签下划线的颜色pager_tab_strip.setTabIndicatorColor(getResources().getColor(R.color.indicatorcolor));mViewPager.setAdapter(new MainAdpater(getSupportFragmentManager()));//sendBroadcast(new Intent("com.itheima.google.killall"));//Log.i(tag, msg)}private class MainAdpater extends FragmentStatePagerAdapter{public MainAdpater(FragmentManager fm) {super(fm);}// 每个条目返回的fragment//  0@Overridepublic Fragment getItem(int position) {//  通过Fragment工厂  生产Fragment   return FragmentFactory.createFragment(position);}// 一共有几个条目 @Overridepublic int getCount() {return tab_names.length;}// 返回每个条目的标题@Overridepublic CharSequence getPageTitle(int position) {return tab_names[position];}}@SuppressLint("NewApi")@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_main, menu);// 如果运行的环境 (部署到什么版本的手机 )大于3.0if (android.os.Build.VERSION.SDK_INT > 11) {SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();searchView.setOnQueryTextListener(this);// 搜索的监听} return true;}/** 处理actionBar菜单条目的点击事件 */public boolean onOptionsItemSelected(MenuItem item) {if (item.getItemId() == R.id.action_search) {Toast.makeText(getApplicationContext(), "搜索", 0).show();}return drawerToggle.onOptionsItemSelected(item)|super.onOptionsItemSelected(item);}// 当搜索提交的时候@Overridepublic boolean onQueryTextSubmit(String query) {Toast.makeText(getApplicationContext(), query, 0).show();return true;}// 当搜索的文本发生变化@Overridepublic boolean onQueryTextChange(String newText) {return true;}
}

  

3.UiUtils 
  1. public class UiUtils {/*** 获取到字符数组 * @param tabNames  字符数组的id*/public static String[] getStringArray(int tabNames) {return getResource().getStringArray(tabNames);}public static Resources getResource() {return BaseApplication.getApplication().getResources();}/** dip转换px */public static int dip2px(int dip) {final float scale = getResource().getDisplayMetrics().density;return (int) (dip * scale + 0.5f);}/** pxz转换dip */public static int px2dip(int px) {final float scale = getResource().getDisplayMetrics().density;return (int) (px / scale + 0.5f);}
    }
    

这样定义数组: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 {private static Map<Integer, Fragment> mFragments = new HashMap<Integer, Fragment>();public static Fragment createFragment(int position) {Fragment fragment = null;fragment = mFragments.get(position);  //在集合中取出来Fragmentif (fragment == null) {  //如果再集合中没有取出来 需要重新创建if (position == 0) {fragment = new HomeFragment();} else if (position == 1) {fragment = new AppFragment();} else if (position == 2) {fragment = new GameFragment();} else if (position == 3) {fragment = new SubjectFragment();} else if (position == 4) {fragment = new CategoryFragment();} else if (position == 5) {fragment = new TopFragment();}if (fragment != null) {mFragments.put(position, fragment);// 把创建好的Fragment存放到集合中缓存起来}}return fragment;}
    }
    

      

通过这样获取上下文

/*** 代表当前应用程序* @author itcast**/
public class BaseApplication extends Application {private static BaseApplication application;@Overridepublic void onCreate() {super.onCreate();application=this;}public static Context getApplication() {return application;}
}

转载于:https://www.cnblogs.com/sixrain/p/4964461.html

2.抽取代码(BaseActivity)相关推荐

  1. 关系抽取 代码_免费代码营不能赚钱,没关系

    关系抽取 代码 by freeCodeCamp 通过freeCodeCamp 免费代码营不能赚钱,没关系 (Free Code Camp Doesn't Make Money, and That's ...

  2. 写代码抽取代码的技巧

    1.抽取公共代码 做法:1.1 抽象类,公共方法 ,抽象方法 可以参考Hystrix设计 2自定义注解+ 切面 +LUA脚本配置化

  3. 判断随机抽取代码_高中数学中离散型随机变量的分布列知道吗?均值与方差能干什么?...

    一.离散型随机变量的分布列性质及应用 离散型随机变量的分布列主要有三方面的作用: 1) 利用总概率之和为1可以求相关参数的取值范围或值: 2) 利用离散型随机变量在一范围内的概率等于它取这个范围内各个 ...

  4. 判断随机抽取代码_问卷调查:定量研究中的抽样问题(2)- 非随机抽样介绍

    所谓抽样,就是从我们需要研究的所有目标群体中,按照某种原则,挑选出一定量的样本,用他们的研究结果,代表目标群体整体结果.既然,抽样的目的是通过对一部分被选择的样本来推断总体,就要求我们抽取的样本具有能 ...

  5. 文本关键信息抽取——实体抽取代码实现

    使用paddlenlp中与训练好的语言模型来进行实体抽取: # Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. # # Li ...

  6. html和js画圣诞树图片,教你如何把JavaScript代码写成圣诞树

    我们使用了自己写的一个nodejs库,如果您要实现这样的效果,只需要按照下面第一章节的方法即可.当然您也可以在线压缩代码: 下面分两章节,分别讲解如何使用js2image这个库 和 js2image这 ...

  7. python按哪个键运行代码_python运行快捷键是哪个

    python运行快捷键是哪个 发布时间:2020-11-17 11:00:46 来源:亿速云 阅读:90 作者:小新 这篇文章主要介绍了python运行快捷键是哪个,具有一定借鉴价值,需要的朋友可以参 ...

  8. (转载)使用Android Studio对代码进行重构

    (转载)https://blog.csdn.net/guijiaoba/article/details/50608606 简介 2013年Google I/O大会上,谷歌推出新的Android开发环境 ...

  9. 认罪吧,你的代码已经出卖了你!

    指纹出卖你.声音出卖你.笔迹出卖你-- 这都不算什么-- 现在,你写的代码也能出卖你的身份了! 近日,在Drexel大学任职计算机科学的副教授Rachel Greenstadt,及其他的博士学生(现为 ...

最新文章

  1. python掌握程度怎么判断-想要学习人工智能需要掌握Python到什么程度
  2. 用jQuery实现网页卷轴的效果
  3. 这些表情包你有吗?来 Battle 啊
  4. 那些我当了程序员以后才理解的崩溃瞬间!
  5. 老齐python-基础7(文件操作、迭代)
  6. java 死锁_java死锁分析
  7. 在Windows下启动java服务
  8. 《细说PHP》第四版 样章 第二章 PHP的应用与发展 1
  9. 用友NC的一些漏洞复现
  10. STM32应用笔记分类汇总,值得收藏
  11. 虚拟化:十大虚拟化最佳实践
  12. 高德地图自定义地图怎么去除最上边这个默认的蓝色天空?太丑了!!
  13. Elasticsearch之高亮进阶-高性能高亮器, 让Elasticsearch飞一会儿
  14. 服务器主板四路SLI时候出现的问题
  15. 云服务器物理主机的区别,云服务器与物理机的区别
  16. 便利vector_你好,C++!(57)9.2 vector容器是数组的最佳替代者
  17. 单精度(float) 双精度 (double) 区别
  18. 特殊符号(一)—反斜杠 ” \ “(旋转光标和倒计时的实现)
  19. 微软今中止撑持XP体系 后XP年代带来多少商机
  20. 前端工程化之动态数据代理

热门文章

  1. 连接池和协程池为何能提升并发能力?
  2. 2022-2028年中国氟硅橡胶产业发展动态及投资前景分析报告
  3. 通过聚合数据API获取微信精选文章
  4. 【VB】学生信息管理系统3——连接数据库的前提
  5. 时间处理_pandas_时间处理小结
  6. LeetCode简单题之最长回文串
  7. Tengine AIFramework框架
  8. 个性化排序的神经协同过滤
  9. Android中Service生命周期、启动、绑定、混合使用
  10. TCP/UDP协议基本概念