您的位置:首页 > 其它

智慧北京:主页中内容页面和菜单页面fragment的实现

2016-10-05 23:30 316 查看
实现效果:

减轻了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
4000
_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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: