博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2.抽取代码(BaseActivity)
阅读量:4637 次
发布时间:2019-06-09

本文共 6640 字,大约阅读时间需要 22 分钟。

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

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

  1. public class BaseActivity extends ActionBarActivity {	// 管理运行的所有的activity	public final static List
    mActivities = new LinkedList
    ();//增删快 //使用广播也可以,如果当前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
    copy; synchronized (mActivities) { copy = new LinkedList
    (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
    mFragments = new HashMap
    (); 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;	}}

 

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

你可能感兴趣的文章
杭电多校 Harvest of Apples 莫队
查看>>
java 第11次作业:你能看懂就说明你理解了——this关键字
查看>>
C/C++心得-结构体
查看>>
函数名作为参数传递
查看>>
apt-get for ubuntu 工具简介
查看>>
数值计算算法-多项式插值算法的实现与分析
查看>>
day8-异常处理与网络编程
查看>>
Python基础-time and datetime
查看>>
Linux epoll 笔记(高并发事件处理机制)
查看>>
shell脚本练习01
查看>>
WPF图标拾取器
查看>>
通过取父级for循环的i来理解闭包,iife,匿名函数
查看>>
HDU 3374 String Problem
查看>>
数据集
查看>>
打印python包含汉字报SyntaxError: Non-ASCII character '\xe4' in file
查看>>
[Leetcode] unique paths ii 独特路径
查看>>
HDU 1217 Arbitrage (Floyd + SPFA判环)
查看>>
IntelliJ idea学习资源
查看>>
Django Rest Framework -解析器
查看>>
ExtJs 分组表格控件----监听
查看>>