SlidingMenu的使用
2015-05-01 18:28
417 查看
一、SlidingMenu的原理。
1.原理:两个View重叠,滑动时,让上层的View移开大部分,显示出下层的View。
二、开源项目SlidingMenu的导入与配置。
1.SlidingMenu的使用需要依赖另一个开源项目ActionBarSherlock,需要将ActionBarSherlock的lib文件导入成一个工程,SlidingMenu的lib文件导入成一个工程,然后右键->Properties->Android,点击add添加actionbarsherlock的库工程。注意:必须保持两个工程V4包的一致,导入工程时最好点击Copy
Projects to WorkSpace ,这样可以随意修改代码。
2.在需要导入SlidingMenu的工程中右键->Properties->Android,点击Add添加Lib工程即可。注意:必须保证添加的lib工程所在的目录与该工程的目录在同一目录(即两个工程都在WorkSpace)中。
3.如果需要在3.0以下的手机中使用SlidingMenu和Fragment的话, 需要将SlidingFragmentActivity继承的 FragmentActivity 改为SherlockFragmentActivity。
三、SlidingMenu的使用。
1.SlidingMenu的常用方法。
①创建一个SlidingMenu的实例,并且将其作为主Activity的内容
SlidingMenu slidingMenu =new SlidingMenu(this);
slidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);
或 SlidingMenu slidingMenu=new SlidingMenu(this,SlidingMenu.SLIDING_CONTENT);
②设置SlidingMenu的滑出方向。
slidingMenu.setMode(SlidingMenu.LEFT);
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
③设置滑动显示SlidingMenu的可滑动的范围 。
[b][b]TOUCHMODE_FULLSCREEN为全屏滑动、TOUCHMODE_NONE为不可滑动、[b]TOUCHMODE_MARGIN为边缘滑动,默认边缘滑动。[/b][/b][/b]
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); //在主界面滑动的范围
slidingMenu.setTouchModeBehind(SlidingMenu.TOUCHMODE_FULLSCREEN); //在SlidingMenu滑动隐藏菜单的范围,该属性会使菜单项点击失效。
④设置SLidingMenu与主界面之间的阴影图片和阴影宽度。
slidingMenu.setShadowDrawable(R.drawable.shadow); //设置主界面与菜单之间的阴影图片
slidingMenu.setShadowWidth(int pixel); //设置阴影的宽度(15dp)
slidingMenu.setShadowWidthRes(R.dimen.shadow_width);
⑤设置SlidingMenu显示时主界面的宽度和SlidingMenu的宽度,两者之设置一个,一般设置offset。
slidingMenu.setBehindOffset(int pixel); //设置菜单显示时主界面的宽度(60dp)
slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
slidingMenu.setBehindWidth(int pixel); //设置菜单的宽度
slidingMenu.setBehindWidthRes(res);
⑥设置SlidingMenu显示的内容布局。
slidingMenu.setMenu(int resid); //设置显示的界面布局
slidingMenu.toggle(); //动态的开关SlidingMenu
⑦当需要设置左右两个菜单时,通过如下方法设置右边菜单。
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
slidingMenu.setSecondaryShadowDrawable(R.drawable.shadowright); //设置右边阴影图片
slidingMenu.setSecondaryMenu(int resid); //设置右边布局文件
⑧当使用[b]SlidingMenu.SLIDING_CONTENT将SlidingMenu菜单Attach到Activity上,则可以直接使用findViewById()来得到SlidingMenu的布局控件。[/b]
2.SlidingMenu的监听设置。
①监听SlidingMenu打开的监听器:
slidingMenu.setOnOpenListener(this); //监听打开时
slidingMenu.setOnOpenedListener(this); //监听打开后
②监听SLidingMenu关闭的监听器:
slidingMenu.setOnCloseListener(this); //监听关闭时
slidingMenu.setOnCloseListener(this); //监听关闭后
四、SlidingMenu与Fragment的结合使用。
1.Activity必须继承SlidingFragmentActivity,(如果需要在3.0以下使用SlidingMenu和Fragment,必须让SlidingFragmentActivity继承SherlockFragmentActivity)。
2.设置主界面的布局内容setContentView(),布局文件为一个全屏的FrameLayout。
3.设置SlidingMenu的容器布局setBehindContentView(),布局也为一个全屏FrameLayout。
4.设置主界面默认显示的内容。
//第一个参数为主界面布局文件中FrameLayout的ID,第二个参数为显示的Fragment
getSupportFragmentManager().beginTransaction.replace(int resid,Fragment fragment);
5.设置SlidingMenu容器中显示的内容。
//第一个参数为SlidingMenu容器布局文件中FrameLayout的ID,第二个参数为显示的Fragment
getSupportFragmentManager().beginTransaction.replace(int resid,Fragment fragment);
6.在该Activity中得到SlidingMenu对象。
SlidingMenu slidingMenu =getSlidingMenu();
7.得到对象后,就可以使用该对象的方法来设置SlidingMenu的属性。
8.设置SlidingMenu也显示ActionBar。
//注意必须是false
setSlidingActionBarEnabled(false);
9.设置ActionBar可点击,并出现一个箭头。
//设置Actionbar可点击,并上出现一个箭头
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//ActionBar可点击
getSupportActionBar().setHomeButtonEnabled(true);
10.监听点击ActionBar的功能。
①实现该Activity的onMenuItemSelected()方法。
②判断被点击的Item的ID是否是android.R.id.home。
//如果点击了ActionBar
if(item.getItemId()==android.R.id.home){
slidingMenu.toggle();
}
五、SlidingMenu和Fragment结合使用的示例代码。
1.主Activity的代码:
/**
* SlidingMenu与Fragment的结合使用,Activity必须继承SlidingMenu中的SlidingFragmentActivity
* 如果需要在3.0以下手机上使用ActionBar、SlidingMenu和Fragment
* ,则SlidingMenu中的SlidingFragmentActivity必须继承SherlockFragmentActivity
*
*/
public class MainActivity extends SlidingFragmentActivity implements CallBack {
/**
* SlidingMenu对象
*/
private SlidingMenu slidingMenu;
/**
* 主界面显示的Fragment
*/
private Fragment defaultFragment;
/**
* 唯一标识Fragment的字符串
*/
private final static String FRAGMENT_TAG = "defaultFragment";
/**
* 修饰符必须改为public
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置主Activity的布局,布局文件是一个FrameLayout,ID为fragment_content_container
setContentView(R.layout.activity_test4);
// 设置SlidingMenu的容器布局,布局文件是一个FrameLayout,ID为fragment_slidingmenu_container
setBehindContentView(R.layout.fragment_slidingmenu_container);
// 判断默认的Fragment是否已经存在
if (defaultFragment == null) {
// 设置默认显示的Fragment1
defaultFragment = new Fragment1();
} else {
// 得到保存的Fragment对象
defaultFragment = getSupportFragmentManager().getFragment(
savedInstanceState, FRAGMENT_TAG);
}
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_content_container, defaultFragment)
.commit();
// 设置SlidingMenu的容器显示的内容
FragmentContainer fragmentContainer = new FragmentContainer();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_slidingmenu_container, fragmentContainer)
.commit();
// 初始化SLidingMenu
initSlidingMenu();
// 设置SlidingMenu有ActionBar,必须是false
setSlidingActionBarEnabled(false);
// 设置ActionBar可点击,并出现一个小箭头
// getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//设置ActionBar可点击
getSupportActionBar().setHomeButtonEnabled(true);
}
private void initSlidingMenu() {
// 得到SlidingMenu对象
slidingMenu = getSlidingMenu();
// 设置出现方向
// slidingMenu.setMode(SlidingMenu.LEFT);
// 设置左右两边都有菜单
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
// 设置可滑动的范围
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
// 设置该属性会使SlidingMenu的菜单项点击事件失去效果
// slidingMenu.setTouchModeBehind(SlidingMenu.TOUCHMODE_FULLSCREEN);
// 设置阴影图片
slidingMenu.setShadowDrawable(R.drawable.shadow);
// 设置阴影宽度
slidingMenu.setShadowWidthRes(R.dimen.shadow_width);
// 设置主界面的宽度
slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
// 设置右边菜单布局容器,布局文件是一个FrameLayout,ID为fragment_rightmenu_container
slidingMenu.setSecondaryMenu(R.layout.fragment_rightsliding_container);
// 设置右边菜单的阴影图片
slidingMenu.setSecondaryShadowDrawable(R.drawable.shadow_right);
// 设置右边菜单容器显示的内容
FragmentContainer rightFragmentContainer = new FragmentContainer();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_rightmenu_container,
rightFragmentContainer).commit();
// 不用设置的属性
// slidingMenu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
// slidingMenu.setBehindWidthRes(res);
// slidingMenu.setMenu(res);
}
@Override
public void showClickedFragment(Fragment fragment) {
// 将被点击的Fragment当成默认的fragment
defaultFragment = fragment;
// 显示被点击的Item对应的fragment
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_content_container, fragment).commit();
// 智能开启和关闭SlidingMenu
slidingMenu.toggle();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 将当前显示的Fragment实例保存起来
// 第一个参数Bundle对象,第二个参数为唯一标识该Fragment的tag,第三个参数为Fragment对象
getSupportFragmentManager().putFragment(outState, FRAGMENT_TAG,
defaultFragment);
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
//判断是否点击了Actionbar,ActionBar的id是android.R.id.home
if(item.getItemId() ==android.R.id.home){
slidingMenu.toggle();
}
return super.onMenuItemSelected(featureId, item);
}
}
2.FragmentContainer类的代码:
界面布局文件只是一个简单的ListView。
**
* Fragment容器,包含多个Fragment的标识
*
*/
public class FragmentContainer extends Fragment {
/**
* 显示多个Fragment的LIstView
*/
private ListView fragmentListView;
private List<String> fragmentList;
/**
* 创建一个内部回调接口,主Activity必须实现
*
*/
public interface CallBack {
/**
* 显示被点击Item对应的Fragment
*
* @param fragment
*/
public void showClickedFragment(Fragment fragment);
}
/**
* 接口对象,用来实现Activity的引用
*/
private CallBack callBack;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// 判断主Activity是否实现了CallBack内部接口
if (activity instanceof CallBack) {
//将Activity引用给callBack对象
callBack = (CallBack) activity;
} else {
throw new IllegalStateException(
"FragmentContainer所在的Activity必须实现FragmentContainer的CallBack内部接口类");
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_container_layout,
container, false);
fragmentListView = (ListView) root.findViewById(R.id.fragmentListView);
// 初始化List集合
initList();
// 初始化ListView
initListView();
return root;
}
/**
* 初始化ListView
*/
private void initListView() {
if (fragmentList != null) {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getActivity(), android.R.layout.simple_list_item_1,
fragmentList);
fragmentListView.setAdapter(adapter);
}
// 设置点击事件监听器
fragmentListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new Fragment1();
break;
case 1:
fragment = new Fragment2();
break;
case 2:
fragment = new Fragment3();
break;
case 3:
fragment = new Fragment4();
break;
}
//调用Activity引用的方法
callBack.showClickedFragment(fragment);
}
});
}
/**
* 初始化List集合
*/
private void initList() {
fragmentList = new ArrayList<String>();
// 添加Fragment
fragmentList.add(Fragment1.class.getSimpleName());
fragmentList.add(Fragment2.class.getSimpleName());
fragmentList.add(Fragment3.class.getSimpleName());
fragmentList.add(Fragment4.class.getSimpleName());
}
}
3.四个Fragment类的代码:
四个Fragment的代码和布局文件一样,都是只包含一个TextView,比较简单。
public class Fragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//布局文件中只包含了一个TextView,可以根据自己需要设计布局内容
View root =inflater.inflate(R.layout.fragment1, container, false);
return root;
}
}
1.原理:两个View重叠,滑动时,让上层的View移开大部分,显示出下层的View。
二、开源项目SlidingMenu的导入与配置。
1.SlidingMenu的使用需要依赖另一个开源项目ActionBarSherlock,需要将ActionBarSherlock的lib文件导入成一个工程,SlidingMenu的lib文件导入成一个工程,然后右键->Properties->Android,点击add添加actionbarsherlock的库工程。注意:必须保持两个工程V4包的一致,导入工程时最好点击Copy
Projects to WorkSpace ,这样可以随意修改代码。
2.在需要导入SlidingMenu的工程中右键->Properties->Android,点击Add添加Lib工程即可。注意:必须保证添加的lib工程所在的目录与该工程的目录在同一目录(即两个工程都在WorkSpace)中。
3.如果需要在3.0以下的手机中使用SlidingMenu和Fragment的话, 需要将SlidingFragmentActivity继承的 FragmentActivity 改为SherlockFragmentActivity。
三、SlidingMenu的使用。
1.SlidingMenu的常用方法。
①创建一个SlidingMenu的实例,并且将其作为主Activity的内容
SlidingMenu slidingMenu =new SlidingMenu(this);
slidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);
或 SlidingMenu slidingMenu=new SlidingMenu(this,SlidingMenu.SLIDING_CONTENT);
②设置SlidingMenu的滑出方向。
slidingMenu.setMode(SlidingMenu.LEFT);
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
③设置滑动显示SlidingMenu的可滑动的范围 。
[b][b]TOUCHMODE_FULLSCREEN为全屏滑动、TOUCHMODE_NONE为不可滑动、[b]TOUCHMODE_MARGIN为边缘滑动,默认边缘滑动。[/b][/b][/b]
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); //在主界面滑动的范围
slidingMenu.setTouchModeBehind(SlidingMenu.TOUCHMODE_FULLSCREEN); //在SlidingMenu滑动隐藏菜单的范围,该属性会使菜单项点击失效。
④设置SLidingMenu与主界面之间的阴影图片和阴影宽度。
slidingMenu.setShadowDrawable(R.drawable.shadow); //设置主界面与菜单之间的阴影图片
slidingMenu.setShadowWidth(int pixel); //设置阴影的宽度(15dp)
slidingMenu.setShadowWidthRes(R.dimen.shadow_width);
⑤设置SlidingMenu显示时主界面的宽度和SlidingMenu的宽度,两者之设置一个,一般设置offset。
slidingMenu.setBehindOffset(int pixel); //设置菜单显示时主界面的宽度(60dp)
slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
slidingMenu.setBehindWidth(int pixel); //设置菜单的宽度
slidingMenu.setBehindWidthRes(res);
⑥设置SlidingMenu显示的内容布局。
slidingMenu.setMenu(int resid); //设置显示的界面布局
slidingMenu.toggle(); //动态的开关SlidingMenu
⑦当需要设置左右两个菜单时,通过如下方法设置右边菜单。
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
slidingMenu.setSecondaryShadowDrawable(R.drawable.shadowright); //设置右边阴影图片
slidingMenu.setSecondaryMenu(int resid); //设置右边布局文件
⑧当使用[b]SlidingMenu.SLIDING_CONTENT将SlidingMenu菜单Attach到Activity上,则可以直接使用findViewById()来得到SlidingMenu的布局控件。[/b]
2.SlidingMenu的监听设置。
①监听SlidingMenu打开的监听器:
slidingMenu.setOnOpenListener(this); //监听打开时
slidingMenu.setOnOpenedListener(this); //监听打开后
②监听SLidingMenu关闭的监听器:
slidingMenu.setOnCloseListener(this); //监听关闭时
slidingMenu.setOnCloseListener(this); //监听关闭后
四、SlidingMenu与Fragment的结合使用。
1.Activity必须继承SlidingFragmentActivity,(如果需要在3.0以下使用SlidingMenu和Fragment,必须让SlidingFragmentActivity继承SherlockFragmentActivity)。
2.设置主界面的布局内容setContentView(),布局文件为一个全屏的FrameLayout。
3.设置SlidingMenu的容器布局setBehindContentView(),布局也为一个全屏FrameLayout。
4.设置主界面默认显示的内容。
//第一个参数为主界面布局文件中FrameLayout的ID,第二个参数为显示的Fragment
getSupportFragmentManager().beginTransaction.replace(int resid,Fragment fragment);
5.设置SlidingMenu容器中显示的内容。
//第一个参数为SlidingMenu容器布局文件中FrameLayout的ID,第二个参数为显示的Fragment
getSupportFragmentManager().beginTransaction.replace(int resid,Fragment fragment);
6.在该Activity中得到SlidingMenu对象。
SlidingMenu slidingMenu =getSlidingMenu();
7.得到对象后,就可以使用该对象的方法来设置SlidingMenu的属性。
8.设置SlidingMenu也显示ActionBar。
//注意必须是false
setSlidingActionBarEnabled(false);
9.设置ActionBar可点击,并出现一个箭头。
//设置Actionbar可点击,并上出现一个箭头
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//ActionBar可点击
getSupportActionBar().setHomeButtonEnabled(true);
10.监听点击ActionBar的功能。
①实现该Activity的onMenuItemSelected()方法。
②判断被点击的Item的ID是否是android.R.id.home。
//如果点击了ActionBar
if(item.getItemId()==android.R.id.home){
slidingMenu.toggle();
}
五、SlidingMenu和Fragment结合使用的示例代码。
1.主Activity的代码:
/**
* SlidingMenu与Fragment的结合使用,Activity必须继承SlidingMenu中的SlidingFragmentActivity
* 如果需要在3.0以下手机上使用ActionBar、SlidingMenu和Fragment
* ,则SlidingMenu中的SlidingFragmentActivity必须继承SherlockFragmentActivity
*
*/
public class MainActivity extends SlidingFragmentActivity implements CallBack {
/**
* SlidingMenu对象
*/
private SlidingMenu slidingMenu;
/**
* 主界面显示的Fragment
*/
private Fragment defaultFragment;
/**
* 唯一标识Fragment的字符串
*/
private final static String FRAGMENT_TAG = "defaultFragment";
/**
* 修饰符必须改为public
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置主Activity的布局,布局文件是一个FrameLayout,ID为fragment_content_container
setContentView(R.layout.activity_test4);
// 设置SlidingMenu的容器布局,布局文件是一个FrameLayout,ID为fragment_slidingmenu_container
setBehindContentView(R.layout.fragment_slidingmenu_container);
// 判断默认的Fragment是否已经存在
if (defaultFragment == null) {
// 设置默认显示的Fragment1
defaultFragment = new Fragment1();
} else {
// 得到保存的Fragment对象
defaultFragment = getSupportFragmentManager().getFragment(
savedInstanceState, FRAGMENT_TAG);
}
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_content_container, defaultFragment)
.commit();
// 设置SlidingMenu的容器显示的内容
FragmentContainer fragmentContainer = new FragmentContainer();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_slidingmenu_container, fragmentContainer)
.commit();
// 初始化SLidingMenu
initSlidingMenu();
// 设置SlidingMenu有ActionBar,必须是false
setSlidingActionBarEnabled(false);
// 设置ActionBar可点击,并出现一个小箭头
// getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//设置ActionBar可点击
getSupportActionBar().setHomeButtonEnabled(true);
}
private void initSlidingMenu() {
// 得到SlidingMenu对象
slidingMenu = getSlidingMenu();
// 设置出现方向
// slidingMenu.setMode(SlidingMenu.LEFT);
// 设置左右两边都有菜单
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
// 设置可滑动的范围
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
// 设置该属性会使SlidingMenu的菜单项点击事件失去效果
// slidingMenu.setTouchModeBehind(SlidingMenu.TOUCHMODE_FULLSCREEN);
// 设置阴影图片
slidingMenu.setShadowDrawable(R.drawable.shadow);
// 设置阴影宽度
slidingMenu.setShadowWidthRes(R.dimen.shadow_width);
// 设置主界面的宽度
slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
// 设置右边菜单布局容器,布局文件是一个FrameLayout,ID为fragment_rightmenu_container
slidingMenu.setSecondaryMenu(R.layout.fragment_rightsliding_container);
// 设置右边菜单的阴影图片
slidingMenu.setSecondaryShadowDrawable(R.drawable.shadow_right);
// 设置右边菜单容器显示的内容
FragmentContainer rightFragmentContainer = new FragmentContainer();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_rightmenu_container,
rightFragmentContainer).commit();
// 不用设置的属性
// slidingMenu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
// slidingMenu.setBehindWidthRes(res);
// slidingMenu.setMenu(res);
}
@Override
public void showClickedFragment(Fragment fragment) {
// 将被点击的Fragment当成默认的fragment
defaultFragment = fragment;
// 显示被点击的Item对应的fragment
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_content_container, fragment).commit();
// 智能开启和关闭SlidingMenu
slidingMenu.toggle();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 将当前显示的Fragment实例保存起来
// 第一个参数Bundle对象,第二个参数为唯一标识该Fragment的tag,第三个参数为Fragment对象
getSupportFragmentManager().putFragment(outState, FRAGMENT_TAG,
defaultFragment);
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
//判断是否点击了Actionbar,ActionBar的id是android.R.id.home
if(item.getItemId() ==android.R.id.home){
slidingMenu.toggle();
}
return super.onMenuItemSelected(featureId, item);
}
}
2.FragmentContainer类的代码:
界面布局文件只是一个简单的ListView。
**
* Fragment容器,包含多个Fragment的标识
*
*/
public class FragmentContainer extends Fragment {
/**
* 显示多个Fragment的LIstView
*/
private ListView fragmentListView;
private List<String> fragmentList;
/**
* 创建一个内部回调接口,主Activity必须实现
*
*/
public interface CallBack {
/**
* 显示被点击Item对应的Fragment
*
* @param fragment
*/
public void showClickedFragment(Fragment fragment);
}
/**
* 接口对象,用来实现Activity的引用
*/
private CallBack callBack;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// 判断主Activity是否实现了CallBack内部接口
if (activity instanceof CallBack) {
//将Activity引用给callBack对象
callBack = (CallBack) activity;
} else {
throw new IllegalStateException(
"FragmentContainer所在的Activity必须实现FragmentContainer的CallBack内部接口类");
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_container_layout,
container, false);
fragmentListView = (ListView) root.findViewById(R.id.fragmentListView);
// 初始化List集合
initList();
// 初始化ListView
initListView();
return root;
}
/**
* 初始化ListView
*/
private void initListView() {
if (fragmentList != null) {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getActivity(), android.R.layout.simple_list_item_1,
fragmentList);
fragmentListView.setAdapter(adapter);
}
// 设置点击事件监听器
fragmentListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new Fragment1();
break;
case 1:
fragment = new Fragment2();
break;
case 2:
fragment = new Fragment3();
break;
case 3:
fragment = new Fragment4();
break;
}
//调用Activity引用的方法
callBack.showClickedFragment(fragment);
}
});
}
/**
* 初始化List集合
*/
private void initList() {
fragmentList = new ArrayList<String>();
// 添加Fragment
fragmentList.add(Fragment1.class.getSimpleName());
fragmentList.add(Fragment2.class.getSimpleName());
fragmentList.add(Fragment3.class.getSimpleName());
fragmentList.add(Fragment4.class.getSimpleName());
}
}
3.四个Fragment类的代码:
四个Fragment的代码和布局文件一样,都是只包含一个TextView,比较简单。
public class Fragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//布局文件中只包含了一个TextView,可以根据自己需要设计布局内容
View root =inflater.inflate(R.layout.fragment1, container, false);
return root;
}
}
相关文章推荐
- 第三方库SlidingMenu的使用
- Android开源组件SlidingMenu的基本使用方法和SlidingMenuDemo
- Android SlidingMenu 使用详解
- SlidingMenu的使用及常用属性
- SlidingMenu的使用
- Android SlidingMenu 使用详解
- 无需SherlockActionbar的SlidingMenu使用详解(一)——通过SlidingMenu设置容器并解决滑动卡顿的问题
- Android中使用开源库slidingMenu实现侧滑效果
- slidingMenu的使用
- Github上的SlidingMenu菜单的使用方法
- Android SlidingMenu 使用详解
- SlidingMenu的详细使用
- SlidingMenu和日夜间模式结合使用
- SlidingMenu使用
- 开源项目SlidingMenu的使用
- Android SlidingMenu 使用详解
- actionbar、slidingmenu、fragment的使用 day03
- SlidingMenu 使用说明
- 初使用SlidingMenu的方法总结
- Android SlidingMenu 开源项目 侧拉菜单的使用(详细配置)