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

2.抽取代码(BaseActivity)

时间:2015-11-14 16:33:33      阅读:586      评论:0      收藏:0      [点我收藏+]

标签:

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. }




 




2.抽取代码(BaseActivity)

标签:

原文地址:http://www.cnblogs.com/liuyu0529/p/4964461.html

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