实现效果:
减轻了Activity负担,Activity只需要负责管理2个fragment,而让fragment去处理页面内容
1、设置FrameLayout,一种最纯净的布局,里面不用计算什么,和Fragment搭配时相当于一个空壳子,不负责任何东西的处理,只负责切换
____main.xml、menu.xml___
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main_container_content"
android:orientation="vertical" >
</FrameLayout>
2、设置Fragment管理者和开启事务
___MainUI.java___
<pre name="code" class="html">package huaxa.it.zhihuidemo;
import huaxa.it.zhihuidemo.fragment.ContentFragment;
import huaxa.it.zhihuidemo.fragment.MenuFragment;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.Window;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;
/**
* @项目名: ZhiHuiDemo
* @包名: huaxa.it.zhihuidemo
* @类名: MainUI
* @创建者: 黄夏莲
* @创建时间: 2016年10月4日 ,下午11:38:11
*
* @描述: 主页面
*/
public class MainUI extends SlidingFragmentActivity
{
private static final String TAG_CONTENT = "content";
private static final String TAG_MENU= "menu";
@Override
public void onCreate(Bundle savedInstanceState)
{
//去掉title
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
// 1、设置主页内容
setContentView(R.layout.content_container);
//2、设置菜单的布局
setBehindContentView(R.layout.menu_container);
//菜单的实例
SlidingMenu mMenu = getSlidingMenu();
//3、设置SlidingMenu的Mode
mMenu.setMode(SlidingMenu.LEFT);//若不设置,默认就是left
// mMenu.setMode(SlidingMenu.LEFT_RIGHT)
// //4、如果有右菜单
// mMenu.setSecondaryMenu(R.layout.xxx);
//5、设置菜单的宽度
mMenu.setBehindWidth(300);//设置的是菜单的宽度
// mMenu.setBehindOffset(300);//设置的是菜单外面其他内容的宽度
//设置Touch Mode Above
mMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//全屏显示,不可左右拖动菜单达到打开和收回效果
// mMenu.setTouchModeBehind(SlidingMenu.TOUCHMODE_FULLSCREEN);//可左右拖动菜单达到打开和收回效果
//加载菜单和主页
initFragment();
}
private void initFragment()
{
FragmentManager manager = getSupportFragmentManager();
//1、开启事务
FragmentTransaction transaction = manager.beginTransaction();
//2、加载切换主页面
transaction.replace(R.id.main_container_content, new ContentFragment(),TAG_CONTENT);
// 加载切换菜单页面
transaction.replace(R.id.main_container_menu, new MenuFragment() ,TAG_MENU);
//3、提交事务
transaction.commit();
}
}
3、声明ContentFragment和MenuFragment类
基础:声明一个BaseFragment基类,放onCreateView等抽象类,并用protected保护起来(protected表示你愿意让你的子孙后代看见你的物品,也愿意帮他们做事。)
abstract:
abstract修饰符用来修饰类和成员方法
a:用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化。
b:用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现。
abstract的 规则:
a:抽象类可以没有抽象方法,但是有抽象方法的类必须定义为抽象类,如果一个子类继承一个抽象类,子类没有实现父类的所有抽象方法,那么子类也要定义为抽象类,否则的话编译会出错的。
b:抽象类没有构造方法,也没有抽象静态方法。但是可以有非抽象的构造方法
c:抽象类不能被实例化,但是可以创建一个引用变量,类型是一个抽象类,并让它引用非抽象类的子类的一个实例
d:不能用final 修饰符修饰
____ContentFragment、MenuFragment_______
package huaxa.it.zhihuidemo.fragment;
import org.w3c.dom.Text;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
/**
* @项目名: ZhiHuiDemo
* @包名: huaxa.it.zhihuidemo.fragment
* @类名: MainFragment
* @创建者: 黄夏莲
* @创建时间: 2016年10月5日 ,下午11:32:13
*
* @描述: <span style="font-family: Arial, Helvetica, sans-serif;"></span> 菜单页面 <span style="font-family: Arial, Helvetica, sans-serif;"></span>
*/
public class MenuFragment extends BaseFragment
{
@Override
protected View initView()
{
TextView text = new TextView(mActivity) ;
text.setText("菜单页面");
text.setTextSize(25);
text.setGravity(Gravity.CENTER);
return text;
}
}
package huaxa.it.zhihuidemo.fragment;
import android.annotation.SuppressLint;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
/**
* @项目名: ZhiHuiDemo
* @包名: huaxa.it.zhihuidemo.fragment
* @类名: ContentFragment
* @创建者: 黄夏莲
* @创建时间: 2016年10月5日 ,下午11:31:04
*
* @描述: 内容页面
*/
public class ContentFragment extends BaseFragment
{
@Override
protected View initView()
{
TextView text = new TextView(mActivity);
text.setText("主页面");
text.setTextSize(25);
text.setGravity(Gravity.CENTER);
return text;
}
}
—————BaseFragment———————
package huaxa.it.zhihuidemo.fragment;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* @项目名: ZhiHuiDemo
* @包名: huaxa.it.zhihuidemo.fragment
* @类名: BaseFragment
* @创建者: 黄夏莲
* @创建时间: 2016年10月5日 ,下午11:33:38
*
* @描述: Fragment基类
*/
public abstract class BaseFragment extends Fragment
{
protected Activity mActivity;
@Override
public void onCreate(Bundle savedInstanceState)
{
// 拿到宿主Activity
super.onCreate(savedInstanceState);
mActivity = getActivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
// TODO Auto-generated method stub
return initView();
}
protected abstract View initView();
}