ActivityGroup使用问题

 
以下是本人在处理ActivityGroup中各个子Activity切换和旋转屏幕时,各个子Activity的相关处理,接触android时间不长,有什么不周到的地方还请见谅,欢迎高手指点有哪些地方做的不好,万分感谢。

//继承ActivityGroupLocalActivityManager
public class MainTabActivity extends ActivityGroup {
//定义LocalActivityManager来管理ActivityGroup中的子Activity
    private LocalActivityManager lm;
//子Activity之间切换的按钮
    private Button clock;
    private Button worldclock;
    private Button alarm;
    private Button stopwatch;
    private Button timer;
//装载子Activity布局的LinearLayout
    private LinearLayout displayLayout;
//唯一标识子Activity的ID
    private static final String CLOCK_DETAIL_PORT = "CLOCK_DETAIL_PORT";
    private static final String WORLDCLOCK_DETAIL_PORT = "WORLDCLOCK_DETAIL_PORT";
    private static final String ALARMCLOCK_DETAIL_PORT = "ALARMCLOCK_DETAIL_PORT";
    private static final String STOPWATCH_DETAIL_PORT = "STOPWATCH_DETAIL_PORT";
    private static final String TIMER_DETAIL_PORT = "TIMER_DETAIL_PORT";
//标识当前按钮的显示效果
    private boolean isClock = false;
    private boolean isWorldClock = false;
    private boolean isAlarmClock = false;
    private boolean isStopwatch = false;
    private boolean isTimer = false;
//记录当前子Activity的ID
    private static String myDisplayID;
//向子Activity发送广播的action
    public static final String WORLDCLOCK_INTENT = "worldclock";
    public static final String ALARMCLOCK_INTENT = "alarmclock";

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
      
         if(lm == null)
//获取LocalActivityManager
        lm = getLocalActivityManager();
        setContentView(R.layout.maintab);
        initView();
//设置进入模块默认显示的内容
        if(getActivity(CLOCK_DETAIL_PORT)== null){
            Intent intent = new Intent(MainTabActivity.this,
                    ClockActivity.class);
            chooseActivity(intent,CLOCK_DETAIL_PORT);
            
        }else{
            resumeActivity(getActivity(CLOCK_DETAIL_PORT),true);
        }
//设置各个按钮的显示状态
        selectClock(true);
        selectWorldClock(false);
        selectAlarmClock(false);
        selectStopWatch(false);
        selectTimer(false);
//记录当前Activity的ID
        myDisplayID = CLOCK_DETAIL_PORT;
    }

    private void initView() {
//初始化控件

        clock = (Button) findViewById(R.id.clock);
        worldclock = (Button) findViewById(R.id.worldclock);
        alarm = (Button) findViewById(R.id.alarmclock);
        stopwatch = (Button) findViewById(R.id.stopwatch);
        timer = (Button) findViewById(R.id.timer);
        displayLayout = (LinearLayout) findViewById(R.id.display);
        onClickClockBtn();
        onClickWroldclockBtn();
        onClickAlarmBtn();
        onClickStopwatchBtn();
        onClickTimerBtn();
    }
//定义ClockActivity按钮的点击事件

    private void onClickClockBtn() {
        clock.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                selectClock(true);
                selectWorldClock(false);
                selectAlarmClock(false);
                selectStopWatch(false);
                selectTimer(false);
                    if(getActivity(CLOCK_DETAIL_PORT)== null){
                        Intent intent = new Intent(MainTabActivity.this,
                                ClockActivity.class);
                        chooseActivity(intent,CLOCK_DETAIL_PORT);
                        
                    }else{
                        resumeActivity(getActivity(CLOCK_DETAIL_PORT),true);
                    }
                    myDisplayID = CLOCK_DETAIL_PORT;
                }
        });
    }
//定义WorldClockActivity按钮的点击事件

    private void onClickWroldclockBtn() {
        worldclock.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                selectClock(false);
                selectWorldClock(true);
                selectAlarmClock(false);
                selectStopWatch(false);
                selectTimer(false);
                    if(getActivity(WORLDCLOCK_DETAIL_PORT)== null){
                        Intent intent = new Intent(MainTabActivity.this,
                                WorldClockActivity.class);
                        chooseActivity(intent,WORLDCLOCK_DETAIL_PORT);
                        
                    }else{
                        resumeActivity(getActivity(WORLDCLOCK_DETAIL_PORT),true);
                    }
                    myDisplayID = WORLDCLOCK_DETAIL_PORT;
                }
        });
    }
//定义AlarmClockActivity按钮的点击事件

    private void onClickAlarmBtn() {
        alarm.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                selectClock(false);
                selectWorldClock(false);
                selectAlarmClock(true);
                selectStopWatch(false);
                selectTimer(false);
                    if(getActivity(ALARMCLOCK_DETAIL_PORT)== null){
                        Intent intent = new Intent(MainTabActivity.this,
                                AlarmClockActivity.class);
                        chooseActivity(intent,ALARMCLOCK_DETAIL_PORT);
                        
                    }else{
                        resumeActivity(getActivity(ALARMCLOCK_DETAIL_PORT),false);
                    }
                    myDisplayID = ALARMCLOCK_DETAIL_PORT;
                }
        });
    }
//定义stopwatchActivity按钮的点击事件

    private void onClickStopwatchBtn() {
        stopwatch.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                selectClock(false);
                selectWorldClock(false);
                selectAlarmClock(false);
                selectStopWatch(true);
                selectTimer(false);
                    if(getActivity(STOPWATCH_DETAIL_PORT)== null){
                        Intent intent = new Intent(MainTabActivity.this,
                                StopWatchActivity.class);
                        chooseActivity(intent,STOPWATCH_DETAIL_PORT);
                        
                    }else{
                        resumeActivity(getActivity(STOPWATCH_DETAIL_PORT),false);
                    }
                    myDisplayID = STOPWATCH_DETAIL_PORT;
                }
        });
    }
//定义TimerActivity按钮的点击事件

    private void onClickTimerBtn() {
        timer.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                selectClock(false);
                selectWorldClock(false);
                selectAlarmClock(false);
                selectStopWatch(false);
                selectTimer(true);
                    if(getActivity(TIMER_DETAIL_PORT)== null){
                        Intent intent = new Intent(MainTabActivity.this,
                                TimerActivity.class);
                        chooseActivity(intent,TIMER_DETAIL_PORT);
                        
                    }else{
                        resumeActivity(getActivity(TIMER_DETAIL_PORT),false);
                    }
                    myDisplayID = TIMER_DETAIL_PORT;
                }
        });
    }
//启动子Activity
    private void chooseActivity(Intent intent, String activityId) {
        if (intent == null) {
            return;
        }
        Window w = lm.startActivity(activityId, intent);
        if(w != null){
            displayLayout.removeAllViews();
            displayLayout.addView(w.getDecorView(), LayoutParams.FILL_PARENT,
                    LayoutParams.FILL_PARENT);
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
    }
   
   

   

//定义子Activity中需要的menu
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        menu.clear();
        if (getActivity(myDisplayID) instanceof WorldClockActivity) {
            menu.add(0, 0, 0, R.string.worldclcok_add).setIcon(R.drawable.option_add);
            menu.add(0, 1, 0, R.string.worldclock_del).setIcon(R.drawable.option_delete);
            menu.add(0, 2, 0, R.string.worldclock_dst).setIcon(R.drawable.option_dts_setting);
        }
        if (getActivity(myDisplayID) instanceof AlarmClockActivity) {
            menu.add(0, 3, 0, R.string.add_alarm).setIcon(R.drawable.option_add);
            menu.add(0, 4, 0, R.string.del_alarm).setIcon(R.drawable.option_delete);
            menu.add(0, 5, 0, R.string.del_all).setIcon(R.drawable.option_delete_all);
            menu.add(0, 6, 0, R.string.all_on).setIcon(R.drawable.option_all_on);
            menu.add(0, 7, 0, R.string.all_off).setIcon(R.drawable.option_all_off);
        }
        return true;
    }
   
   
//menu各个item的点击处理
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

        case 0:
            Intent intent0 = new Intent();
            intent0.setAction(WORLDCLOCK_INTENT);
            intent0.putExtra("menuid", "add");
            this.sendBroadcast(intent0);
            
            return true;
        case 1:
            Intent intent1 = new Intent();
            intent1.setAction(WORLDCLOCK_INTENT);
            intent1.putExtra("menuid", "del");
            this.sendBroadcast(intent1);
            return true;

        case 2:
            Intent intent2 = new Intent();
            intent2.setAction(WORLDCLOCK_INTENT);
            intent2.putExtra("menuid", "dts");
            this.sendBroadcast(intent2);
            return true;
        case 3:
            Intent intent3 = new Intent();
            intent3.setAction(ALARMCLOCK_INTENT);
            intent3.putExtra("menuid", "add_alarm");
            this.sendBroadcast(intent3);
            
            return true;
        case 4:
            Intent intent4 = new Intent();
            intent4.setAction(ALARMCLOCK_INTENT);
            intent4.putExtra("menuid", "del_alarm");
            this.sendBroadcast(intent4);
            return true;

        case 5:
            Intent intent5 = new Intent();
            intent5.setAction(ALARMCLOCK_INTENT);
            intent5.putExtra("menuid", "del_all");
            this.sendBroadcast(intent5);
            return true;
        case 6:
            Intent intent6 = new Intent();
            intent6.setAction(ALARMCLOCK_INTENT);
            intent6.putExtra("menuid", "all_on");
            this.sendBroadcast(intent6);
            return true;

        case 7:
            Intent intent7 = new Intent();
            intent7.setAction(ALARMCLOCK_INTENT);
            intent7.putExtra("menuid", "all_off");
            this.sendBroadcast(intent7);
            return true;
        }

        return false;
    }
//旋转屏幕处理事件
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        setContentView(R.layout.maintab);
        initView();
        reusmeAllView();
        Activity tmpActivity = getActivity(myDisplayID);
        if (tmpActivity != null){
                resumeActivity(tmpActivity,true);
            
        }
        if(!myDisplayID.equals(CLOCK_DETAIL_PORT)){
            tmpActivity = getActivity(CLOCK_DETAIL_PORT);
            if(tmpActivity != null){
                if (tmpActivity instanceof RefreshChild) {
                    ((RefreshChild) tmpActivity).onConfigurationChangedFromParent(true);
                }
            }
        }
        if(!myDisplayID.equals(WORLDCLOCK_DETAIL_PORT)){
            tmpActivity = getActivity(WORLDCLOCK_DETAIL_PORT);
            if(tmpActivity != null){
                if (tmpActivity instanceof RefreshChild) {
                    ((RefreshChild) tmpActivity).onConfigurationChangedFromParent(true);
                }
            }
        }
        if(!myDisplayID.equals(ALARMCLOCK_DETAIL_PORT)){
            tmpActivity = getActivity(ALARMCLOCK_DETAIL_PORT);
            if(tmpActivity != null){
                if (tmpActivity instanceof RefreshChild) {
                    ((RefreshChild) tmpActivity).onConfigurationChangedFromParent(true);
                }
            }
        }
        if(!myDisplayID.equals(STOPWATCH_DETAIL_PORT)){
            tmpActivity = getActivity(STOPWATCH_DETAIL_PORT);
            if(tmpActivity != null){
                if (tmpActivity instanceof RefreshChild) {
                    ((RefreshChild) tmpActivity).onConfigurationChangedFromParent(true);
                }
            }
        }
        if(!myDisplayID.equals(TIMER_DETAIL_PORT)){
            tmpActivity = getActivity(TIMER_DETAIL_PORT);
            if(tmpActivity != null){
                if (tmpActivity instanceof RefreshChild) {
                    ((RefreshChild) tmpActivity).onConfigurationChangedFromParent(true);
                }
            }
        }
    }
   
//旋转屏幕时设置各个按钮的显示状态
    private void reusmeAllView() {
        if (isClock) {
            selectClock(true);
            selectWorldClock(false);
            selectAlarmClock(false);
            selectStopWatch(false);
            selectTimer(false);
        }
        if (isWorldClock) {
            selectClock(false);
            selectWorldClock(true);
            selectAlarmClock(false);
            selectStopWatch(false);
            selectTimer(false);
        }
        if (isAlarmClock) {
            selectClock(false);
            selectWorldClock(false);
            selectAlarmClock(true);
            selectStopWatch(false);
            selectTimer(false);
        }
        if (isStopwatch) {
            selectClock(false);
            selectWorldClock(false);
            selectAlarmClock(false);
            selectStopWatch(true);
            selectTimer(false);
        }
        if (isTimer) {
            selectClock(false);
            selectWorldClock(false);
            selectAlarmClock(false);
            selectStopWatch(false);
            selectTimer(true);
        }
    }
//重新加载子Activity的内容
    private void resumeActivity(Activity activity,boolean isDestroy) {
        if (activity instanceof RefreshChild) {
            ((RefreshChild) activity).onConfigurationChangedFromParent(isDestroy);
        }
        View activityView = null;
        try {
            activityView = activity.getWindow().getDecorView();
        } catch (Exception e) {
        }

        ViewParent parentView = activityView.getParent();
        if (parentView != null && parentView instanceof ViewGroup) {
            ((ViewGroup) parentView).removeAllViews();
        }

        if (activityView != null && displayLayout != null) {
            displayLayout.removeAllViews();
            displayLayout.addView(activityView);
        }

    }
//获得指定ID的activity
    private Activity getActivity(String myActivityId) {
        if (lm != null)
            return lm.getActivity(myActivityId);
        else
            return null;

    }
//定义公共接口,子Activity继承接口,处理旋转屏幕事件
    public interface RefreshChild {
        void onConfigurationChangedFromParent(boolean isDestroy);
    }
//定义ClockActivity按钮被点击后显示状态

    private void selectClock(boolean b) {
        isClock = b;
        clock.setBackgroundDrawable(getResources().getDrawable(
                b ? R.drawable.tab_clock_press : R.drawable.tab_clock));
        clock.setClickable(!b);
    }
//定义WroldClockActivity按钮被点击后显示状态

    private void selectWorldClock(boolean b) {
        isWorldClock = b;
        worldclock.setBackgroundDrawable(getResources()
                .getDrawable(
                        b ? R.drawable.tab_worldclock_press
                                : R.drawable.tab_worldclock));
        worldclock.setClickable(!b);
    }
//定义AlarmClockActivity按钮被点击后显示状态
    private void selectAlarmClock(boolean b) {
        isAlarmClock = b;
        alarm.setBackgroundDrawable(getResources().getDrawable(
                b ? R.drawable.tab_alarm_press : R.drawable.tab_alarm));
        alarm.setClickable(!b);
    }
//定义StopwatchActivity按钮被点击后显示状态
    private void selectStopWatch(boolean b) {
        isStopwatch = b;
        stopwatch.setBackgroundDrawable(getResources().getDrawable(
                b ? R.drawable.tab_stopwatch_press : R.drawable.tab_stopwatch));
        stopwatch.setClickable(!b);
    }
//定义TimerActivity按钮被点击后显示状态
    private void selectTimer(boolean b) {
        isTimer = b;
        timer.setBackgroundDrawable(getResources().getDrawable(
                b ? R.drawable.tab_timer_press : R.drawable.tab_timer));
        timer.setClickable(!b);
    }

}

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">
    <RelativeLayout android:id="@+id/head_tab_view"
        android:layout_width="fill_parent" android:layout_height="wrap_content">
        <Button android:id="@+id/clock" android:layout_width="120px"
            android:layout_height="98px" android:background="@drawable/tab_alarm"
            android:layout_centerVertical="true" android:gravity="bottom|center_horizontal" />
        <Button android:id="@+id/worldclock" android:layout_width="120px"
            android:layout_height="98px" android:background="@drawable/tab_worldclock"
            android:layout_toRightOf="@id/clock" android:layout_centerVertical="true"
            android:gravity="bottom|center_horizontal" />
        <Button android:id="@+id/alarmclock" android:layout_width="120px"
            android:layout_height="98px" android:background="@drawable/tab_alarm"
            android:layout_toRightOf="@id/worldclock" android:layout_centerVertical="true"
            android:gravity="bottom|center_horizontal" />
        <Button android:id="@+id/stopwatch" android:layout_width="120px"
            android:layout_height="98px" android:background="@drawable/tab_stopwatch"
            android:layout_toRightOf="@id/alarmclock" android:layout_centerVertical="true"
            android:gravity="bottom|center_horizontal" />
        <Button android:id="@+id/timer" android:layout_width="120px"
            android:layout_height="98px" android:background="@drawable/tab_timer"
            android:layout_toRightOf="@id/stopwatch" android:layout_centerVertical="true"
            android:gravity="bottom|center_horizontal" />
    </RelativeLayout>
        
    <LinearLayout android:layout_width="fill_parent" android:id="@+id/display"
        android:layout_height="fill_parent" android:layout_weight="1">
    </LinearLayout>
</LinearLayout>
  评论这张
转发至微博
转发至微博

你可能感兴趣的:(ActivityGroup使用问题)