Android 如何在ActivityGroup中使用startActivityForResult()?

Android 如何在ActivityGroup中使用startActivityForResult()?,android,android-tabhost,activitygroup,android-activity,Android,Android Tabhost,Activitygroup,Android Activity,我将TabActivity与一些选项卡一起使用,每个选项卡包含一个ActvityGroup,每个ActivityGroup管理多个活动。其中一个ActivityGroup有三个活动:a、B和C 首先创建A,当用户单击A中的按钮时,它跳转到B 在B中有一些重要数据可以在C中编辑,当单击B中的“编辑”按钮时,它会跳转到C 如果某些数据在C中编辑,当我单击“上一步”按钮时,我希望修改B中的相同数据。 让我疯狂的是,当我在C类中使用“finish()”时,我的应用程序会直接退出 我在网上搜索了很多解决方

我将TabActivity与一些选项卡一起使用,每个选项卡包含一个ActvityGroup,每个ActivityGroup管理多个活动。其中一个ActivityGroup有三个活动:a、B和C

首先创建A,当用户单击A中的按钮时,它跳转到B

在B中有一些重要数据可以在C中编辑,当单击B中的“编辑”按钮时,它会跳转到C

如果某些数据在C中编辑,当我单击“上一步”按钮时,我希望修改B中的相同数据。 让我疯狂的是,当我在C类中使用“finish()”时,我的应用程序会直接退出

我在网上搜索了很多解决方案,但没有一个适合我的情况,我不知道哪里错了,请帮助我或给我一个如何在ActivityGroup中使用startActivityForResult()的示例

这是我的小组:

public class MyGroup extends ActivityGroup 
{

private int ID=0;
private AlertDialog dialog;
private Stack<View>history;                
private LocalActivityManager manager;

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

    history = new Stack<View>();
    manager = getLocalActivityManager();

    Intent intent = new Intent(this,A.class);
    startActivity(intent);
}

@Override
public void startActivity(Intent intent) 
{
    View view = manager.startActivity(""+ID++,intent).getDecorView();
    history.push(view);
    setContentView(view);
}

@Override
public void startActivityForResult(Intent intent,int requestCode)
{
    // super.startActivityForResult(intent, requestCode);
    View view = manager.startActivity(""+ID++,intent).getDecorView();
    history.push(view);
    setContentView(view);
}

/*
 * if user edited data in C.class.
 * when C.class finished,refresh data in the B.class
 */
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data)
{
    Log.e("MyGroup","running");
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode==RESULT_OK)
    {
           //modify data in B.java
        B subActivity=(B)(manager.getCurrentActivity());
        subActivity.handleActivityResult(requestCode, resultCode, data);
    }
}

/*
 * when press back button, manage which page to show next
 * if there is one page in stack,that means when press back button it will
 * exit the app,so we add a dialog to notify user whether exit app or not
 */
@Override
public void onBackPressed()
{
    int size=history.size();
    if ( history.size()>= 2) 
    {
        history.remove(size-1);
        setContentView(history.get(size-2));
    }
    else
    {
        if(dialog==null)
        {
            createDialog();
        }
        dialog.show();
    }   
}  
}  
在C类中:

@Override
public void onBackPressed() 
{
    if(price!=null)
    {
        Bundle bundle=new Bundle();
        bundle.putString("name",name);
        bundle.putString("price",price);
        bundle.putString("quantity",quantity);

        this.getParent().setResult(RESULT_OK,new Intent().putExtras(bundle));
        this.finish();
        Log.e("C","inner");
    }
    Log.e("C","outer");
    this.getParent().onBackPressed();
}

你为什么叫finish?按back意味着它将销毁ActivityGroup中的活动,而不会直接获得响应调用。 您需要从ActivityGroup重定向。 请看下面的答案
这是解决办法。请试试这个


如果我从未在活动C中使用“finish()”,它就不会在activityGroup中调用startActivityForResult()。因此它无法修改活动B中的数据。这是解决方案。请试试这个
@Override
public void onBackPressed() 
{
    if(price!=null)
    {
        Bundle bundle=new Bundle();
        bundle.putString("name",name);
        bundle.putString("price",price);
        bundle.putString("quantity",quantity);

        this.getParent().setResult(RESULT_OK,new Intent().putExtras(bundle));
        this.finish();
        Log.e("C","inner");
    }
    Log.e("C","outer");
    this.getParent().onBackPressed();
}