2.抽取代码(BaseActivity)

摘要:
有两种方法可以退出程序:复制集合同步的用法、字符数组工厂模式和生成fatgage。这解决了重复创建片段的问题。全局上下文是actionbar用法,fargetadapper。当可视寻呼机在远处时更方便。1.提取BaseActivity以管理所有活动,这便于退出publicclassBaseActivityextendsActionBarActivity{//管理所有正在运行的活动

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

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

  1. public class BaseActivity extends ActionBarActivity {
    	// 管理运行的所有的activity
    	public 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();
    	}
    	@Override
    	protected 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 implements
		OnQueryTextListener {
	private DrawerLayout mDrawerLayout;
	private ActionBarDrawerToggle drawerToggle;
	private ViewPager mViewPager;
	private PagerTabStrip pager_tab_strip;
	private String[] tab_names;  // 标签的名字
	@Override
	protected 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){
					@Override
					public void onDrawerClosed(View drawerView) {
						super.onDrawerClosed(drawerView);
						Toast.makeText(getApplicationContext(), "抽屉关闭了", 0).show();
					}
					@Override
					public void onDrawerOpened(View drawerView) {
						super.onDrawerOpened(drawerView);
						Toast.makeText(getApplicationContext(), "抽屉打开了", 0).show();
					}
			
		};
		mDrawerLayout.setDrawerListener(drawerToggle);
		//  让开关和actionbar建立关系 
		drawerToggle.syncState();
		
	}
	@Override
	protected void init() {
		tab_names = UiUtils.getStringArray(R.array.tab_names);
	}
	
	@Override
	protected 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
		@Override
		public Fragment getItem(int position) {
			//  通过Fragment工厂  生产Fragment   
			return FragmentFactory.createFragment(position);
		}
		// 一共有几个条目 
		@Override
		public int getCount() {
			return tab_names.length;
		}
		// 返回每个条目的标题
		@Override
		public CharSequence getPageTitle(int position) {
			return tab_names[position];
		}
		
	}
	@SuppressLint("NewApi")
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		// 如果运行的环境 (部署到什么版本的手机 )大于3.0
		if (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);
	}
	// 当搜索提交的时候
	@Override
	public boolean onQueryTextSubmit(String query) {
		Toast.makeText(getApplicationContext(), query, 0).show();
		return true;
	}
	// 当搜索的文本发生变化
	@Override
	public 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);  //在集合中取出来Fragment
    		if (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;
	@Override
	public void onCreate() {
		super.onCreate();
		application=this;
		
	}
	public static Context getApplication() {
		return application;
	}
}



免责声明:文章转载自《2.抽取代码(BaseActivity)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySQL实现批量检查表并进行repair与optimize的方法RGBColor类定义下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

吐槽下若依(RuoYi)系统的权限系统(shiro和spring-security)

spring-security以RuoYi-Vue为例,当前版本是3.1.0。然后是系统中很多地方用LoginUserloginUser=tokenService.getLoginUser来获取当前用户数据,这个需要再解析token,然后从redis缓存中读取的数据,不明白为什么不直接从SecurityUtils.getLoginUser()中获取,明明已经...

QMap与QHash

Qt提供两个主要的关联容器类:QMap和QHash。QMap的K和T有一对方便的函数keys()和values(),它们在处理小数据集时显的特别有用。QMap重载了value,返回一个给定键多有值的QList列表。在内部,它们都依赖于QHash,且都像QHash一样对K的类型有相同的要求。...

Android开发实战——记账本(4)

父母亲mCostBeanList.remove(位置);builder.setNegativeButton(“取消”;builder.create().show();returntrue;}returnsuper.onOptionsItemSelected(项);...

GPU与CPU

GPU和CPU CPU,也称为中央处理单元,主要由控制器、运算单元、寄存器、高速缓冲区和数据/控制/状态总线组成。GPU GPU称为GraphicsProcessingUnit,即图形处理器。GPU最初是为终端游戏设计的。由于对游戏中的大量数据重复相同的操作,GPU面临着类型高度统一、相互依赖的大规模数据。GPU的内核远多于CPU。它向多个内核发送相同的指令...

差分方程的零输入响应与零状态响应

差分方程的迭代分析方法有以下缺点:没有闭合解,不利于数学分析。某个时间的输出只能从头开始计算。本文介绍了差分方程的零输入响应和零状态响应分析方法。对于系统,这种分析方法可以很好地表达系统响应的物理意义=Y[-1]=0$Input Y[n]。回顾零输入响应和零状态响应的迭代计算,我们发现以下规则:$egin{align*}y[0]&=-&qqu...

开源跳板机jumpserver的安装部署和使用详细教程及踩坑经验

安装篇jumpserver需要依赖于mysql数据库,python开发工具的支持,所以需要安装一系列软件。按照提示进行所有流程的安装,安装完成之后访问http://ip:8000端口即可登录到jumpserver。因为jumpserver会在被管理的后端主机上通过此处指定的管理用户来添加指定的用户和sudo权限:配置sudo授权,用于添加sudo授权。...