zoukankan      html  css  js  c++  java
  • 2.抽取代码(BaseActivity)

    知识点
    • 俩种退出程序的方法
    • 复制集合
    • 同步的用法
    • 字符数组
    • 工厂模式,生产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;
    	}
    }
    



  • 相关阅读:
    003.iSCSI客户端管理
    002.iSCSI服务端配置
    001.iSCSI简介
    004.RAID删除
    003.RAID管理
    002.RAID创建
    001.RAID简介
    001.hadoop及hbase部署
    001.Parted工具使用
    007.LVM查看命令
  • 原文地址:https://www.cnblogs.com/sixrain/p/4964461.html
Copyright © 2011-2022 走看看