2.抽取代码(BaseActivity)
生活随笔
收集整理的這篇文章主要介紹了
2.抽取代码(BaseActivity)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
知識點
- 倆種退出程序的方法
- 復制集合
- 同步的用法
- 字符數組
- 工廠模式,生產fatgment,解決了碎片重復創建的問題
- 全局上下文
- actionbar用法
- fargmentadapter,當viewpager里是fargment的話更方便
1.抽取BaseActivity???管理所有activity?方便退出
-
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() {} }
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?
-
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-array name="tab_names"><item>首頁</item><item>應用</item><item>游戲</item><item>專題</item><item>分類</item><item>排行</item></string-array>
-
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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 对UIImage进行的一些操作
- 下一篇: 守望先锋需要多少战网点数1元等于多少战网