目前项目需求底部菜单要一直保持在底部.看网上又人用activitygroup+gridview做的,就试着做下.后来发现这么做实在是太不操作了.给经理说了原由之后.放弃了这种做法,我觉得如果项目中没有数据的交互的话用这个也行.毕竟一直有底部菜单.操作方便.虽然放弃了这种做法.还是记下大概的步骤.
1.首先布局文件就比较简单了.用个主要的布局文件.文件包括一个gridview做底部菜单.在放一个空的layout,用来加载跳转的activity;
2.代码实现 给gridview添加一个adapter.添加OnItemClickListener监听.让他点击那个条目就让空的layout加载对应的页面,adapter简单.就一个图片.一个文本
girdview跳转代码:
private void switchActivity(int i) {
layout.removeAllViews();// 必须先清除容器中所有的View
Intent intent = null;
switch (i) {
case 0:
intent = new Intent(this, HomeAcitvity.class);
break;
case 1:
intent = new Intent(this, SearchAcitvity2.class);
break;
default:
break;
}
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// Activity 转为 View
Window subActivity = getLocalActivityManager().startActivity("subActivity", intent);
// 容器添加View
layout.addView(subActivity.getDecorView(), LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
}
上面代码中的layout就是主布局文件中的空layout,做完这些.应该就能够跳转了.但是如果点击gridview中一个条目.跳转到了A页面.点击A的一个button跳到B页面,改怎么跳呢.
内部activity跳转实现方法:在activitygroup中生成自身的一个静态变量,然后在activitygroup中添加下面两个修改layout内容的方法:
/** ActivityGroup加载新的Activity的方法(创建新的) */
public void launchNewActivity(Intent intent) {
layout.removeAllViews();
layout.addView(getLocalActivityManager().startActivity(intent.getComponent().getShortClassName(),
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView());
}
/** ActivityGroup加载Activity的方法(先看有没有,有则加载原来的,否则创建新的) */
public void launchActivity(Intent intent) {
layout.removeAllViews();
layout.addView(getLocalActivityManager().startActivity(intent.getComponent().getShortClassName(), intent).getDecorView());
}
在A页面的button的点击时间中就可以用activitygroup的静态对象根据需要调用上面的方法就可以了.比如
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ActivityC.this, ActivityD.class);
ActivityGroupDemo.activityGroup.launchNewActivity(intent);
}
});
这么做页面跳转正常.但是返回事件不能使用了.而且页面的onKeyDown这个方法重写了也没有了;网上又人说在activitygroup中重写onkeydown方法,返回值为
return getCurrentActivity().getCurrentFocus().onKeyDown(keyCode, event);
就可以调用各自activity的onkeydown方法了 我试过这个没有,可能是我哪的代码不对,
然后网上有人说重写dispatchKeyEvent可以用.果然.用这个方法可以处理返回时间.
返回事件的做法:
1. 在activitygroup中重写dispatchKeyEvent.在activitygroup中声明一个activity的值栈,记录avtivitygroup中每次页面跳转,并保留上次页面的索引 。放入堆栈中
2. 在activitygroup中监听back键 。
3.从自己的堆栈中取上最上面的那个activity页面实现 。
但是每次点击返回返回都会执行2次dispatchKeyEvent,就要判断
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
这样就能监听返回时间.因为目前返回我也没有处理的完美.所以就不放代码了.小做记录.说不定日后还会用到