简体   繁体   English

如何从ActivityGroup中的子活动返回到父活动?

[英]How to return back to parent activity from child activity in ActivityGroup?

I've implemented a TabActivity Which has 4 Tabs, one of the tab is ParentActivity when I go to this tab, there is a button which says Go To Child when I click on this button I'm able to go to the child activity as follows: 我已经实现了一个TabActivity,它具有4个选项卡,当我转到该选项卡时,其中一个选项卡是ParentActivity ,当我单击该按钮时,有一个按钮显示“ Go To Child ,我可以转到子项活动如下:

 /****************** ON BUTTON CLICK ******************/
 Intent childView = new Intent(v.getContext(), ChildActivity.class);
 replaceContentView("child_view", childView );
 //ParentActivity.this.finish();
 /****************************************************/

 public void replaceContentView(String activityID, Intent activityIntent) {
 View view = getLocalActivityManager().startActivity(activityID,activityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) .getDecorView();
 this.setContentView(view);
 }

Now I want to come back to ParentActivity when I click on the Button which says Go To Parnt in ChildActivity. 现在,当我单击ChildActivity中的“ Go To Parnt ”按钮时,我想回到ParentActivity How do I do this, I tried so many examples but I didn't get it. 我如何做到这一点,我尝试了很多示例,但没有得到。 I want my tabs must be in all the activities. 我希望我的标签页必须在所有活动中。 I've included sample activity image. 我包括了示例活动图像。 在此处输入图片说明

Start Child Activity like: 开始Child Activity例如:

 Intent edit = new Intent(getParent(), Contact.class);
 TabGroupActivity parentActivity = (TabGroupActivity) getParent();
 parentActivity.startChildActivity("Contact", edit);

And Implement back button click on Child Activity like: 并执行后退按钮,单击Child Activity例如:

back_btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

        TabGroupActivity parentActivity = (TabGroupActivity) getParent();
        parentActivity.onBackPressed();

        }
    });

And implement onBackPressed() on your TabGroupActivity like: 并在TabGroupActivity上实现onBackPressed() ,例如:

@Override
public void onBackPressed() {
    try{
        Log.i("TabGroup", "Current on BackPressed called: ");
        int length = mIdList.size();
        Log.i("TabGroup", "Current ArrayList Size(): "+length);
        if (length > 1) {

            Activity current = getLocalActivityManager().getActivity(
                    mIdList.get(length - 1));

            Log.i("TabGroup", "Current Last Activity"+current);

            current.finish();
        } else {
            MakeExitDialog();
        }
    }catch(Exception e){
        e.printStackTrace();
    }

}

And also add startChildActivity(....) in your TabGroupActivity 还可以添加startChildActivity(....)TabGroupActivity

public void startChildActivity(String Id, Intent intent) {
    // LocalActivityManager manager = getLocalActivityManager();
    int count = mIdList.size() - 1;
    for (int i = count; i >= 0; i--) {
        // System.out.println("Activity "+i+":::"+mIdList.get(i));
    }

    // System.out.println("Activity Started");
    Window window = getLocalActivityManager().startActivity(Id,
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
    if (window != null) {
        mIdList.add(Id);
        setContentView(window.getDecorView());
    }
}

Update: make your main TabGroupActivity like: 更新:使您的主要TabGroupActivity像这样:

  public class TabGroupActivity extends ActivityGroup {

private ArrayList<String> mIdList;
public static TabGroupActivity tabgrp;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (mIdList == null)
        mIdList = new ArrayList<String>();
        int length = mIdList.size();
        Log.i("TabGroupActivity", "ArrayList Size(): "+length);
}



@Override
public void finishFromChild(Activity child) {

    LocalActivityManager manager = getLocalActivityManager();
    int index = mIdList.size() - 1;

    if (index < 1) {
        finish();
        return;
    }

    manager.destroyActivity(mIdList.get(index), true);
    mIdList.remove(index);
    index--;
    String lastId = mIdList.get(index);
    Intent lastIntent = manager.getActivity(lastId).getIntent();
    Window newWindow = manager.startActivity(lastId, lastIntent);
    setContentView(newWindow.getDecorView());
}


public void startChildActivity(String Id, Intent intent) {
    // LocalActivityManager manager = getLocalActivityManager();
    int count = mIdList.size() - 1;
    for (int i = count; i >= 0; i--) {
        // System.out.println("Activity "+i+":::"+mIdList.get(i));
    }

    // System.out.println("Activity Started");
    Window window = getLocalActivityManager().startActivity(Id,
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
    if (window != null) {
        mIdList.add(Id);
        setContentView(window.getDecorView());
    }
}


@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {

        return true;
    }
    return super.onKeyDown(keyCode, event);
}


@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        onBackPressed();
        return true;
    }
    return super.onKeyUp(keyCode, event);
}


@Override
public void onBackPressed() {
    try{
        Log.i("TabGroup", "Current on BackPressed called: ");
        int length = mIdList.size();
        Log.i("TabGroup", "Current ArrayList Size(): "+length);
        if (length > 1) {

            Activity current = getLocalActivityManager().getActivity(
                    mIdList.get(length - 1));

            Log.i("TabGroup", "Current Last Activity"+current);

            current.finish();
        } else {

        }
    }catch(Exception e){
        e.printStackTrace();
    }

}

 }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM