最近项目开发,使用到该功能,废话不多说先上效果图:
MainActivity代码:
public class MainActivity extends SlidingFragmentActivity { public static final String APP_HOME_LEFT_MENU_TAG = "APP_HOME_LEFT_MENU_TAG"; private BaseFragment mFragmentOne, mFragmentTwo; private SlidingMenu slidingMenu; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //初始化slidingMenu initSlidingMenu(); //初始化Fragment initFragment(); } private void initSlidingMenu() { //设置主页面 setContentView(R.layout.activity_main); //设置左侧菜单 setBehindContentView(R.layout.left_menu); //得到SlidingMenu实例 slidingMenu = getSlidingMenu(); //显示模式 slidingMenu.setMode(SlidingMenu.LEFT); //设置滑动模式 slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); //设置主页占据位置 slidingMenu.setBehindOffset(dip2px(this, 50)); //滑出时淡入淡出以及比例 slidingMenu.setFadeEnabled(true); slidingMenu.setFadeDegree(0.4f); } private void initFragment() { //得到FragmentManger FragmentManager manager = getSupportFragmentManager(); //开启事务 FragmentTransaction transaction = manager.beginTransaction(); //替换 LeftFragment mLeftFragment = new LeftFragment(); transaction.replace(R.id.left_menu, mLeftFragment, APP_HOME_LEFT_MENU_TAG); //提交 transaction.commit(); showFragmentOne(); } public void showFragmentOne() { if (mFragmentOne == null) { mFragmentOne = new FragmentOne(); } if (!mFragmentOne.isVisible()) { getSupportFragmentManager().beginTransaction() .replace(R.id.layout_content, mFragmentOne).commit(); } slidingMenu.showContent(true); } public void showFragmentTwo() { if (mFragmentTwo == null) { mFragmentTwo = new FragmentTwo(); } if (!mFragmentTwo.isVisible()) { getSupportFragmentManager().beginTransaction() .replace(R.id.layout_content, mFragmentTwo).commit(); } slidingMenu.showContent(true); } /** * 根据手机的分辨率从 dip 的单位 转成为 px(像素) */ public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } }
左侧SlindingMenu代码:
public class LeftFragment extends BaseFragment implements View.OnClickListener { private MainActivity mActivity; private Button mButtonA; private Button mButtonB; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mActivity = (MainActivity) getActivity(); } @Override public View initView() { View view = View.inflate(context, R.layout.left_fragment, null); mButtonA = view.findViewById(R.id.btn1); mButtonB = view.findViewById(R.id.btn2); return view; } @Override public void initData() { super.initData(); mButtonA.setOnClickListener(this); mButtonB.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btn1: mActivity.showFragmentOne(); break; case R.id.btn2: mActivity.showFragmentTwo(); break; } } }
收件箱模块片段:
public class FragmentOne extends BaseFragment { /** * 选中的Fragment的对应的位置 */ private int position; /** * 上次切换的Fragment */ private BaseFragment preFragment; private RadioGroup mRadioGroup; private TextView mTv_send_email; private List<BaseFragment> mBaseFragment; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); initFragments(); } private void initFragments() { mBaseFragment = new ArrayList<>(); mBaseFragment.add(new EmailFragment()); mBaseFragment.add(new ContactsFragment()); } @Override public View initView() { View view = View.inflate(context, R.layout.fragment_one,null); mTv_send_email = view.findViewById(R.id.tv_send_email); mRadioGroup = view.findViewById(R.id.mRadioGroup); return view; } @Override public void initData() { super.initData(); mTv_send_email.setText("收件箱"); mRadioGroup.setOnCheckedChangeListener(new MyOnCheckedChangeListener()); mRadioGroup.check(R.id.receive_email); } private class MyOnCheckedChangeListener implements RadioGroup.OnCheckedChangeListener { @Override public void onCheckedChanged(RadioGroup radioGroup, @IdRes int checkedId) { switch (checkedId) { case R.id.receive_email: position = 0; break; case R.id.contacts: position = 1; break; } //根据位置得到对应的Fragment BaseFragment to = getFragment(); //实现切换fragment switchFragment(preFragment, to); } } /** * 根据位置得到对应的Fragment */ private BaseFragment getFragment() { return mBaseFragment.get(position); } /** * 实现切换fragment */ private void switchFragment(BaseFragment fragment, BaseFragment to) { if (fragment != to) { preFragment = to; FragmentManager manager = getActivity().getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); if (!to.isAdded()) { //to没有被添加 //fragment隐藏 if (fragment != null) { transaction.hide(fragment); } //添加to if (to != null) { transaction.add(R.id.mFrameLayout, to).commit(); } } else { //to已经被添加 // fragment隐藏 if (fragment != null) { transaction.hide(fragment); } //显示to if (to != null) { transaction.show(to).commit(); } } } } }
其中EmailFragment,ContactsFragment
等页面就引入一个布局文件,很简单,代码就不贴了
另外下面附本Demo的下载地址,直接在AS上即可运行.
感谢阅读,欢迎读者提出宝贵意见!
附Demo演示下载地址:http://download.youkuaiyun.com/download/kqh_2715/10260776