现在的位置: 首页 > 综合 > 正文

SlidingMenu学习总结 (二)

2017年04月04日 ⁄ 综合 ⁄ 共 2508字 ⁄ 字号 评论关闭

上一节我们基本实现了滑动菜单的效果,但是在滑动菜单中,我们并没有添加内容。在这一节,我们要在滑动菜单中添加内容,然后设置点击事件,点哪个,就跳转到对应的内容中去。


首先,我们新建一个类MenuFragment,让它去继承Fragment。同时重写里面的三个方法,分别是

onCreateViewonActivityCreated和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变成全局变量


然后



这样,就可以完成点击后,滑动菜单隐藏,内容部分填满窗体的效果了。












抱歉!评论已关闭.