(待续)粗略整理了一下杨广福的视频教程,将软件架构整理如下。
1. 首先引入侧滑菜单,和主内容页面。
侧滑菜单在软件的第一个onCreate里实现注册。并且设置好参数,比如侧滑方式和滑动的像素数。
public class MainActivity extends SlidingFragmentActivity { public static final String MAIN_CONTENT_TAG = "main_content_tag"; public static final String LEFTMENU_TAG = "leftmenu_tag"; @Override public void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE);//设置没有标题 super.onCreate(savedInstanceState); initSlidingMenu(); //初始化Fragment initFragment(); } private void initSlidingMenu() { //1.设置主页面 setContentView(R.layout.activity_main); //2.设置左侧菜单 setBehindContentView(R.layout.activity_leftmenu); //3.设置右侧菜单 SlidingMenu slidingMenu = getSlidingMenu(); // slidingMenu.setSecondaryMenu(R.layout.activity_rightmenu);//设置右侧菜单 //4.设置显示的模式:左侧菜单+主页,左侧菜单+主页面+右侧菜单;主页面+右侧菜单 slidingMenu.setMode(SlidingMenu.LEFT); //5.设置滑动模式:滑动边缘,全屏滑动,不可以滑动 slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); //6.设置主页占据的宽度 // slidingMenu.setBehindOffset(DensityUtil.dip2px(MainActivity.this, 200)); slidingMenu.setBehindOffset((int) (screeWidth*0.625)); } private void initFragment() { //1.得到FragmentManger FragmentManager fm = getSupportFragmentManager(); //2.开启事务 FragmentTransaction ft= fm.beginTransaction(); //3.替换 ft.replace(R.id.fl_main_content,new ContentFragment(), MAIN_CONTENT_TAG);//主页 ft.replace(R.id.fl_leftmenu, new LeftmenuFragment(), LEFTMENU_TAG);//左侧菜单 //4.提交 ft.commit(); } }
2.写侧滑菜单和主内容页面的layout布局文件。并且写这两个布局文件的Fragment文件,,把这两个Fragment的重复的地方,抽象出来,形成基类,抽出两个方法,initView 和 initData。
开始时添加Fragment(侧滑菜单的),然后重写两个方法,一个是onCreateView ,一个是onActivityCreated,这两个方法,一个是创建视图时,一个是activity创建后。连上默认创建的onCreate方法一共3个。
因为这两个方法,在主内容也存在,开始抽取基类,BaseFragment。这样leftmenuFragment,和contentFragment,继承这个基类。着这个基类中,添加public 的上下文字段,public Activity content;
重写onCreateView,返回return initView();然后创建抽象方法initView方法。在onActivityCreated方法中,添加initData()方法,并且创建这个方法,public void initData()。
public abstract class BaseFragment extends Fragment { public Activity context;//MainActivity /** * 当Fragment被创建的时候回调这个方法 * @param savedInstanceState */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = getActivity(); } /** * 当视图被创建的时候回调 * @param inflater * @param container * @param savedInstanceState * 创建了视图 * @return */ @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return initView(); } /** * 让孩子实现自己的视图,达到自己特有的效果 * @return */ public abstract View initView() ; /** * 当Activity被创建之后被回调 * @param savedInstanceState */ @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initData(); } /** * 1.如果自页面没有数据,联网请求数据,并且绑定到initView初始化的视图上 * 2.绑定到initView初始化的视图上 */ public void initData() { } }
/** * * 微信:yangguangfu520 * QQ号:541433511 * 作用:左侧菜单的Fragment */ public class LeftmenuFragment extends BaseFragment { private TextView textview; @Override public View initView() { LogUtil.e("左侧菜单视图被初始化了"); textview= new TextView(context);
textview.setTextSize(23);
textview.setGravity(Gravity.CENTER);
textview.setTextColor(Color.RED);
return textview;
}
@Override public void initData() { super.initData();
textview.setText('左侧页面被调用'); LogUtil.e("左侧菜单数据被初始化了"); } }
/** * QQ号:541433511 * 作用:正文Fragment */ public class ContentFragment extends BaseFragment { private ViewPager viewpager;
private RadioGroup rg_main;
@Override public View initView() { LogUtil.e("正文Fragemnt视图被初始化了"); View view = View.inflate(context, R.layout.content_fragment,null); viewpager= (ViewPager)view.findViewById(R.id.viewpager);
rg_main=(RadioGroup)view.findViewById(R.id.rg_main);
//1.把视图注入到框架中,让ContentFragment.this和View关联起来 // x.view().inject(ContentFragment.this,view); return view; } @Override public void initData() { super.initData(); LogUtil.e("正文Fragment数据被初始化了"); }
3.在主文件中,用FragmentManager方法替换之前写好的layout布局文件,这时即可实现初步的侧滑和主内容文件的初步架构。并且将重复显示的layout文件里的布局代码删掉。
在mainActivity中,添加initFragment方法,创建initFragment方法
private void initFragment(){ FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.fl_main_content,new ContentFragment(),MAIN_CONTENT_TAG); ft.replace(R.id.fl_leftmenu,new LeftmenuFragment(),LEFT_MENU_TAG); ft.commit(); }
4.在主内容页面,实现viewpager和radiogroup。
public class ContentFragment extends BaseFragement { @Override public View initView(){ View view = view.inflate(context,R.layout.content_fragment,null); return view; }
@Override public void initData(){
super.initData();
} }
然后创建R.layout.content_fragment,线性布局,上面是viewpager,高度为0,权重为1 。下面是radiogroup,里面是radiobutton,样式用选择器布局,实现点击后的变色。
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="false" android:color="@android:color/white"/> <item android:state_checked="true" android:color="@android:color/holo_red_light"/> </selector>
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="false" android:drawable="@drawable/home"/> <item android:state_checked="true" android:drawable="@drawable/home_press"/> </selector>