package com.lq.activity; import java.util.ArrayList; import java.util.List; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager.OnBackStackChangedListener; import android.support.v4.app.FragmentTransaction; import android.util.Log; import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.KeyEvent; import android.view.MotionEvent; import com.google.analytics.tracking.android.EasyTracker; import com.lq.fragment.FrameLocalMusicFragment; import com.lq.fragment.MenuFragment; import com.lq.fragment.PromptDialogFragment; import com.lq.service.MusicService; import com.lq.xpressmusic.R; import com.slidingmenu.lib.SlidingMenu; import com.umeng.analytics.MobclickAgent; /** * @author lq 2013-6-1 lq2625304@gmail.com * */ public class MainContentActivity extends FragmentActivity implements OnBackStackChangedListener { public interface OnBackKeyPressedListener { public abstract void onBackKeyPressed(); } private static final String TAG = MainContentActivity.class.getSimpleName(); public static final int MESSAGE_SWITCH_TO_PLAY_IMAGE = 0; public static final int MESSAGE_SWITCH_TO_PAUSE_IMAGE = 1; /** 手势检测 */ private GestureDetector mDetector = null; /** 侧滑菜单控件 */ private SlidingMenu mSlidingMenu = null; private List<Fragment> mFragmentList = new ArrayList<Fragment>(); private Fragment mCurrentFragment = null; private int mBackStackEntryCount = 0; private List<OnBackKeyPressedListener> mBackKeyPressedListeners = new ArrayList<OnBackKeyPressedListener>(); @Override protected void onCreate(Bundle savedInstanceState) { Log.i(TAG, "onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.layout_content); getSupportFragmentManager().addOnBackStackChangedListener(this); mBackStackEntryCount = getSupportFragmentManager() .getBackStackEntryCount(); // 初始化SlidingMenu,并为其填充Fragment initSlidingMenu(); initPopulateFragment(); // 设置滑动手势 mDetector = new GestureDetector(new SimpleOnGestureListener() { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // 从左向右滑动 if (e1 != null && e2 != null) { if (e1.getX() - e2.getX() > 120) { switchToPlayer(); return true; } } return false; } }); } /** 设置SlidingMenu */ private void initSlidingMenu() { mSlidingMenu = new SlidingMenu(this); // 1.为SlidingMenu宿主一个Activity mSlidingMenu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW); // 2.为SlidingMenu指定布局 mSlidingMenu.setMenu(R.layout.layout_menu); // 3.设置SlidingMenu从何处可以滑出 mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); // 4.设置SlidingMenu的滑出方向 mSlidingMenu.setMode(SlidingMenu.LEFT); // 5.设置SlidingMenu的其他参数 mSlidingMenu.setShadowWidthRes(R.dimen.shadow_width); mSlidingMenu.setShadowDrawable(R.drawable.shadow); mSlidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset); mSlidingMenu.setFadeDegree(0.35f); mSlidingMenu.setBehindScrollScale(0.0f);// 滑动时侧滑菜单的内容静止不动 } /** 为SlidingMenu和Content填充Fragment */ private void initPopulateFragment() { MenuFragment menuFragment = new MenuFragment(); mCurrentFragment = new FrameLocalMusicFragment(); FragmentTransaction fragmentTransaction = getSupportFragmentManager() .beginTransaction(); fragmentTransaction.replace(R.id.frame_menu, menuFragment, menuFragment .getClass().getName()); fragmentTransaction.replace(R.id.frame_main, mCurrentFragment, mCurrentFragment.getClass().getName()); fragmentTransaction.commit(); mFragmentList.add(mCurrentFragment); } public SlidingMenu getSlidingMenu() { return mSlidingMenu; } @Override protected void onStart() { super.onStart(); EasyTracker.getInstance(this).activityStart(this); } @Override protected void onResume() { super.onResume(); MobclickAgent.onResume(this); } @Override protected void onPause() { super.onPause(); MobclickAgent.onPause(this); } @Override protected void onStop() { super.onStop(); EasyTracker.getInstance(this).activityStop(this); } @Override protected void onDestroy() { Log.i(TAG, "onDestroy"); super.onDestroy(); mFragmentList.clear(); mFragmentList = null; mBackKeyPressedListeners.clear(); mBackKeyPressedListeners = null; } public void registerBackKeyPressedListener(OnBackKeyPressedListener listener) { if (!mBackKeyPressedListeners.contains(listener)) { mBackKeyPressedListeners.add(listener); } } public void unregisterBackKeyPressedListener( OnBackKeyPressedListener listener) { mBackKeyPressedListeners.remove(listener); } public void switchToPlayer() { startActivity(new Intent(MainContentActivity.this, PlayerActivity.class)); overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out); } /** * 切换主页内容 */ public void switchContent(String fragmentName) { Fragment f = null; boolean existed = false; if (!mCurrentFragment.getClass().getName().equals(fragmentName)) { // 遍历当前已打开的Fragment集合 for (int i = 0; i < mFragmentList.size(); i++) { // 如果要求切换至的fragment已经存在,则直接把已经存在的显示出来 if (mFragmentList.get(i).getClass().getName() .equals(fragmentName)) { existed = true; f = mFragmentList.get(i); getSupportFragmentManager().beginTransaction() .hide(mCurrentFragment).show(f).commit(); mCurrentFragment = f; break; } } // 如果不存在,则新建 if (!existed) { f = Fragment.instantiate(getApplicationContext(), fragmentName); mFragmentList.add(f); getSupportFragmentManager().beginTransaction() .hide(mCurrentFragment).add(R.id.frame_main, f) .commit(); mCurrentFragment = f; } } mSlidingMenu.showContent(); } public void setSlideEnable(boolean slidable) { if (slidable) { mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); } else { mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE); } } public void exit() { stopService(new Intent(MainContentActivity.this, MusicService.class)); MainContentActivity.this.finish(); } @Override public boolean onTouchEvent(MotionEvent event) { return this.mDetector.onTouchEvent(event); } @Override public void onBackPressed() { if (mBackKeyPressedListeners.size() != 0) { for (OnBackKeyPressedListener listener : mBackKeyPressedListeners) { listener.onBackKeyPressed(); } } if (getSupportFragmentManager().getBackStackEntryCount() > 0) { getSupportFragmentManager().popBackStackImmediate(); } else if (mCurrentFragment != null && mCurrentFragment.getChildFragmentManager() .getBackStackEntryCount() > 0) { if (mCurrentFragment.getView() != null) { mCurrentFragment.getChildFragmentManager() .popBackStackImmediate(); } } else { // 规定在显示菜单时才可退出程序,按返回键弹出侧滑菜单 if (mSlidingMenu.isMenuShowing()) { // 显示菜单时,按返回键退出程序 PromptDialogFragment f = PromptDialogFragment .newInstance( getResources().getString( R.string.are_you_sure_to_exit), new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MainContentActivity.this.exit(); } }); f.show(getSupportFragmentManager(), null); } else { // 菜单没有显示,就弹出菜单 mSlidingMenu.showMenu(); } } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_MENU: mSlidingMenu.toggle(); break; default: break; } return super.onKeyDown(keyCode, event); } @Override public void onBackStackChanged() { // 如果后退栈条目数目增加了 if (mBackStackEntryCount < getSupportFragmentManager() .getBackStackEntryCount()) { mBackStackEntryCount++; } else {// 如果后退栈条目数目减少了 mBackStackEntryCount--; } } }