繁体   English   中英

完成,重新加载活动

[英]Finish, reload activities

我有一个应用程序,其中活动A允许设置一些选项并启动(单击按钮后)活动B。用户可以在B中做某事,完成后,他可以选择(RadioButtons):

  1. 重复-这意味着B活动将使用相同的选项(从A中获取)再次运行,
  2. 新增-表示应用程序完成了B活动并返回到A,在此用户可以再次设置选项并再次启动B,
  3. 结束-它从应用程序中消失了(我想它应该先完成B,然后完成A Activity)。

首先,我这样做:

        Intent intent = getIntent();
        finish();
        startActivity(intent);

我可以使用的另一种方法是清除此Activity中的所有参数,但以上操作更快。

第二个只是finish()

第三是最大的问题,我不知道该怎么做。 我尝试了startActivityForResult()onActivityResult()setResult()但我发现无法根据所选的RadioButton设置不同的结果。

我发现的另一种方法是

public static void closeAllBelowActivities(Activity current) {
boolean flag = true;
Activity below = current.getParent();
if (below == null)
    return;
System.out.println("Below Parent: " + below.getClass());
while (flag) {
    Activity temp = below;
    try {
        below = temp.getParent();
        temp.finish();
    } catch (Exception e) {
        flag = false;
    }
}
}

资源

但是不知道如何放入当前的活动。

你能帮我吗?

“我发现根据选定的RadioButton设置不同的结果是不可能的”对我来说不是很清楚。 无论如何,我建议您要做的是:活动A使用startActivityForResult()启动活动B,而活动A等待来自B的分发包。当您将退出功能从B构建到A时,请创建包含结果的分发包。 在A中,您将分析来自B的捆绑包并决定如何处理。 如果要退出,请调用finish()。

编辑:好的,这可能是您的情况:

活动A:

    public class XY extends Activity { 
    // you need that as a flag to go back and forth:
           protected static final int SUB_ACTIVITY_REQUEST_CODE_04 = 5337; // choose the number you want...
    int result_from_B; // I usually use an int, choose as you want....
    static final String KEY_FROM_B = "mKey";
    @Override 
      protected void onActivityResult(int result,int resultCode,Intent data) {
        super.onActivityResult(result, resultCode, data);
    if (result == SUB_ACTIVITY_REQUEST_CODE_04) {
            if (data!=null){
                Bundle extras = data.getExtras();
                result_from_B = extras.getInt(XY.KEY_FROM_B);
if (result_from_B==1) {
// do what you want
} else {
// do somthing else...
}
}

要调用活动B,请使用以下命令:

Intent i = new Intent(this, 
                    ActB.class);
            this.startActivityForResult(i,SUB_ACTIVITY_REQUEST_CODE_04);

在活动B中:

public class ActB extends Activity{ 
    protected final int SUCCESS_RETURN_CODE = 1; // you need it to come back
int result; // this is the result to give to activity A
}
// in the function to build the output:
// I suppose you have already put something in result:
Bundle bundle = new Bundle();
            bundle.putInt(XY.KEY_FORM_B, result);
            Intent mIntent = new Intent();
            mIntent.putExtras(bundle);
            ActB.this.setResult(SUCCESS_RETURN_CODE,mIntent);
            finish(); 

这是基本的。 您还可以管理所有想要的布尔数组和来回布尔值(捆绑包允许)。 只需将其放入捆绑包中即可:)不要忘记在清单中声明您的类(活动),否则它将抛出异常运行时。

首先,您需要跟踪用于调用B的Intent 。尝试将B的IntentputExtra()方法。您还可以将所有内容打包到Bundle ,并使用getExtras()恢复它(如果我没getExtras()话,这就是方法名称)。 在B上时,读取用于调用它的Intent并保存参数。 您还需要startActivityForResult(B)才能进行以下工作。

重复-这意味着B活动将使用相同的选项(从A中获取)再次运行,

在这种情况下,您可能希望再次使用FLAG_ACTIVITY_SINGLE_TOP标志从活动B调用B。 我假设您不想有两个B实例。 否则,请勿使用该标志。

再次放入从Intent(从A)获得的Bundle ,并在onNewIntent()方法(或通常是onCreate,如果不是单个top)中捕获(如果使用单个top的话)。 它是这样的:B-> B onPause()-> B onNewIntent()-> B onResume()。

新增-表示应用程序完成了B活动并返回到A,在此用户可以再次设置选项并再次启动B,

根据您想要的确切行为,可以使用FLAG_ACTIVITY_REORDER_TO_FRONT来调用A。 在这种情况下,您最终会在前景中看到A,在背景中看到B(按回去会回到B)。

或者,如果您不再想要B并想回到A,则可以调用finish()。

结束-它从应用程序中消失了(我想它应该先完成B,然后完成A Activity)。

在B上不执行任何操作,将setResult()设置为类似于“ RESULT_FINISH_EVERYTHING”,并且在处理A中的结果时(覆盖IIRC的“ onActivityResult()”),还要完成活动A。

但我看到无法根据所选的RadioButton设置不同的结果。

您可以根据单选按钮中选中的thw按钮设置setResult()。 您可以将侦听器设置为单选组,并读取选择了哪个按钮。 如果您需要操纵单个单选按钮的操作,请参见RadioGroup.OnCheckedChangeListenerView.OnClickListener

真的,不是太复杂。 这仅取决于您想要什么。 我可以澄清所有这些。

祝好运!

暂无
暂无

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

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