ActivityGroup,Activity,TabHost注意问题

最近项目测试版本终于发布了,记录一下项目过程中自己关于子Activity,父Activity和Tabhost之间关系的一系列问题:

1、在子Activity中弹出对话框的时候,我们需要使用getParent()做为Context(在子Activity在其它一些需要用到Context的时候,都需要使用getParent(),因为子Activity在此时是当作一个视图添加到父Activity来使用的);

2、在子Activity与子Activity之间进行跳转,但同时又不需要覆盖TabHost的TabWidget的时候,我们需要用到下面的代码:

private void startSubActivity() {
		Intent intent = new Intent(PollingManagementActivity.this,
				PollingManagementActivitySub.class);
		intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
		Holder.linearLayout.removeAllViews();
		View view = getLocalActivityManager().startActivity(
				PollingManagementActivitySub.class.getSimpleName(), intent)
				.getDecorView();
		Holder.linearLayout.addView(view);
	}
注意:当我们第一次点击TabWeidget进入Activity的时候,我们需要把第一次进入的Activity当作父Activity,然后在onCreate方法里也用这种方法跳转到我们需要的Activity中,这样方便我们在以后各个子Activity跳转的时候更容易操作...

上面的代码的一些个小注意问题:

1.1、intent.setFlags设置成国single_top,表示我们在启动这个Activity之后,在Activity没有被销毁的情况下,不会重新创建一个Activity;

1.2、view 我们无论是在子Activity中跳转还是从父Activity跳转到子Activity中,我们这里的view都是父Activity中的view。这个view被当作一个容器添加和删除各个Activity

子类中跳转Activity方法:

private void startPollingResultActivity(PollingRequestvo pollingRequestvo,
			int type) {
		Intent intent = new Intent(PollingManagementActivitySub.this,
				PollingResultActivity.class);
		Bundle bundle = new Bundle();
		bundle.putSerializable("pollingRequestvo", pollingRequestvo);
		bundle.putInt("type", type);
		intent.putExtras(bundle);
		Holder.viewSwitcher.removeAllViews();
		View view = ((ActivityGroup) getParent())
				.getLocalActivityManager()
				.startActivity(PollingResultActivity.class.getSimpleName(),
						intent).getDecorView();
		Holder.viewSwitcher.addView(view);
		currentActivity = false;
	}

这里的view实际是我们的父Activity(ActivityGroup)中的容器。

1.3、getLocalActivityManager().startActivity()前面一个参数PollingManagementActivitySub.class也是在非常重要,我在项目开发的时候,被它坑死了 ,它可以随便设置,但是当我们需要在各个Activity跳转(跳转回来)的时候(并且不要求重新创建新的Activity的时候),这个值必须保证相同,如果要求重新创建Activity,这个值可以不相同。

3、当我们在各个子Activity之间跳转的时候,希望点击返回按钮进行不同的操作,会出现各种出乎意料的操作,我们应该监听返回按钮,再进行具体操作,当然监听返回按钮不是用onBackPress()方法,而是在父类(即ActivityGroup中)调用dispatchKeyEvent这个方法进行监听,这样无论我们在父Activity还是在子Activity中点击按键都会被分发这个按键事件,如果这个事件处理完毕返回true:

如下:

@Override
	public boolean dispatchKeyEvent(KeyEvent event) {
		if (event.getAction() == event.ACTION_DOWN) {
			switch (event.getKeyCode()) {
			case KeyEvent.KEYCODE_BACK:
				String activityName = getCurrentActivity().getClass()
						.getSimpleName();
				if (activityName.equals("PollingManagementActivitySub")) {
					new AlertDialog.Builder(this)
							.setTitle("注意")
							.setMessage("确定要退出手机网管吗?")
							.setIcon(android.R.drawable.ic_menu_help)
							.setPositiveButton("确定",
									new DialogInterface.OnClickListener() {
										public void onClick(
												DialogInterface dialog,
												int which) {
											dialog.dismiss();
											finish();
										}
									})
							.setNegativeButton("取消",
									new DialogInterface.OnClickListener() {
										public void onClick(
												DialogInterface dialog,
												int which) {
											dialog.cancel();
										}
									}).show();
				} else if (activityName.equals("PollingResultActivity")) {
					LinearLayout container = (LinearLayout) findViewById(R.id.viewSwitcher);
					container.removeAllViews();
					Intent intent = new Intent(getCurrentActivity(),
							PollingManagementActivitySub.class);
					intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
					View view = getLocalActivityManager().startActivity(
							PollingManagementActivitySub.class.getSimpleName(),
							intent).getDecorView();
					container.addView(view);
				}
				break;
			}
		}
		return true;
	}


今天又遇到一个纠结的问题ActivityGroup的子Activity跳转的时候遇到Android2.3.3与Android4.0的不兼容的问题,在Android2.3.3中运行好好的,但是到了Android4.0的时候,出现一个子Activity跳转到另一个Activity的时候,失去焦点的问题。必须在跳转的时候加上下面的代码(在ActivityGroup的dispatchKeyEvent方法中):

Holder.linearLayout.setFocusable(true);
Holder.linearLayout.setFocusable(true);
Holder.linearLayout.requestFocusFromTouch();



 


你可能感兴趣的:(String,测试,dialog,手机,menu)