上一节我们基本实现了滑动菜单的效果,但是在滑动菜单中,我们并没有添加内容。在这一节,我们要在滑动菜单中添加内容,然后设置点击事件,点哪个,就跳转到对应的内容中去。
首先,我们新建一个类MenuFragment,让它去继承Fragment。同时重写里面的三个方法,分别是
onCreateView,onActivityCreated和onCreate。它们的执行顺序分别是onCreate,onCreateView,onActivityCreated。
那么,我现在onCreateView方法里,把相应的布局写出来。
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = LayoutInflater.from(getActivity()).inflate(R.layout.list_view, null); return view; }
这里的布局就是一个简单的listview。
<?xml version="1.0" encoding="utf-8"?> <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView>
然后我们去重写onActivityCreated方法。
@Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState); ListView list_view = (ListView) view.findViewById(R.id.list_view); ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, initData()); list_view.setAdapter(adapter); list_view.setOnItemClickListener(this); }
这个方法里,就是对listview进行初始化。其中,initdata()方法的代码是:
private List<String> initData() { List<String> list = new ArrayList<String>(); list.add("fragment1"); list.add("fragment2"); list.add("fragment3"); list.add("fragment4"); return list; }
这样,我们就完成menu的界面。下载是去MainActivity里去使用他。
在MainActivity里,我先获取fragment管理器,然后去开启事务,接着调用replace方法是把fragment加载到MainActivity里面。
在onCreate()里,我们写下这些代码
MenuFragment mf = new MenuFragment(); getFragmentManager().beginTransaction().replace(R.id.menu_frame, mf, "Menu").commit();
这样,就完成了fragment在mainactivity里的加载。
效果如图所示。
接下来,我们要去完成每个条目的点击实践。
然后我们就去完成listview的点击事件啦
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fragment f = null; switch (position) { case 0: f = new fragment1(); break; case 1: f = new fragment2(); break; case 2: f = new fragment3(); break; case 3: f = new fragment4(); break; } switchFragment(f); }
如果当前位置被点击,那么就创建对应的fragment。
然后调用switchFragment(f);方法去加载fragment里面的内容。
private void switchFragment(Fragment f) { if (f != null) { if (getActivity() instanceof MainActivity) { ((MainActivity) getActivity()).switchFragment(f); } } }
这里使用的是回调的方法。
如果当前fragment不为空,那么我们去就MainActivity里去加载内容,回到MainActivity里使用的是判断当前上下文对象是不是MainActivity,是的话,就回到MainActivity。
getActivity() instanceof MainActivity
这时候,我们就要去MainActivity里去实现。
public void switchFragment(Fragment f) { getFragmentManager().beginTransaction().replace(R.id.content_frame, f).commit(); }
自此,我们就完成了每个点击事件。
效果如下图所示
补充:如果想要点击完后,内容部分自动切换填充整个屏幕,那么可以这样写。
首先把sm变成全局变量
然后
这样,就可以完成点击后,滑动菜单隐藏,内容部分填满窗体的效果了。