加载Activity时只改变非导航部分,导航一直不变。
包括点击导航加载Activity,也包括点击Activity控件加载Activity。
加载的Activity可以改变导航的内容。
ActivityGroupActivity
关键方法:
public void loadActivity(String id,Class c){ container.removeAllViews(); container.addView(getLocalActivityManager().startActivity( id,new Intent(this, c) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) .getDecorView()); }
加载Activity到当前Activity的container控件中。
public class ActivityGroupActivity extends ActivityGroup { private ScrollView container = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 隐藏标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置视图 setContentView(R.layout.main); container = (ScrollView) findViewById(R.id.containerBody); // 模块2 ImageView btnModule2 = (ImageView) findViewById(R.id.btnModule2); btnModule2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { loadActivity("Module2", ModuleView2.class); } }); // 模块3 ImageView btnModule3 = (ImageView) findViewById(R.id.btnModule3); btnModule3.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { loadActivity("Module3", ModuleView3.class); } }); } public void loadActivity(String id,Class c){ container.removeAllViews(); container.addView(getLocalActivityManager().startActivity( id,new Intent(this, c) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) .getDecorView()); } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:orientation="vertical" android:layout_height="fill_parent"> <LinearLayout android:gravity="center_horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/cust_title" android:textColor="@android:color/white" android:textSize="28sp" android:text="模块1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> </LinearLayout> <!-- 中间动态加载View --> <ScrollView android:measureAllChildren="true" android:id="@+id/containerBody" android:layout_weight="1" android:layout_height="fill_parent" android:layout_width="fill_parent"> </ScrollView> <LinearLayout android:background="@android:color/black" android:layout_gravity="bottom" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <!-- 功能模块按钮1 --> <!-- 功能模块按钮2 --> <ImageView android:id="@+id/btnModule2" android:src="@android:drawable/ic_dialog_info" android:layout_marginLeft="7dp" android:layout_marginTop="3dp" android:layout_marginBottom="3dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- 功能模块按钮3 --> <ImageView android:id="@+id/btnModule3" android:src="@android:drawable/ic_dialog_alert" android:layout_marginLeft="7dp" android:layout_marginTop="3dp" android:layout_marginBottom="3dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/menutext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> </LinearLayout> </LinearLayout>
ModuleView3
有两个事件,一个改变导航,一个加载Activity。
关键在于this.getParent()会等到框架Activity的引用。更好的方法是自定义一个Application,在其中有一个框架Activity的引用。这样在每个Activity中都可以通过this.getApplication()来找到框架Activity的引用。由框架Activity加载Activity的方法也可以放在Application直接调用。
public class ModuleView3 extends Activity{ TextView t; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 隐藏标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置视图 setContentView(R.layout.l3); Button b=(Button) this.findViewById(R.id.button1); final ActivityGroupActivity aga= (ActivityGroupActivity)this.getParent(); t=(TextView)aga.findViewById(R.id.menutext); b.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub t.setText("Click By Button1"); } }); b=(Button) this.findViewById(R.id.button2); b.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub aga.loadActivity("Module1", ModuleView4.class); } }); } }
L3.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="改变导航" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="打开另一个Activity" /> </LinearLayout>
ModuleView2 和ModuleView4
代码一样。布局文件一个有两个TextView一个只有一个CheckBox。
public class ModuleView2 extends Activity{ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 隐藏标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置视图 setContentView(R.layout.l2); } }
图
第一个Activity
第二个Activity
改变导航条
从第三个Activity加载第四个Activity