activitygroup+gridview 内部跳转

目前项目需求底部菜单要一直保持在底部.看网上又人用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) {


这样就能监听返回时间.因为目前返回我也没有处理的完美.所以就不放代码了.小做记录.说不定日后还会用到

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值