1

所以我有 2 个活动,它们是我的应用程序中用户登录过程的一部分。我希望灵活地从应用程序的不同部分启动登录过程,然后转到两个不同的点(有点像重定向 URL 的东西)。我怎样才能做到这一点?我能想到的一种方法是发送一些额外的数据以及启动过程的意图,以指向它应该去的地方。

例子

A->login1->login2->B
X->login1->login2->Y

非常感谢任何帮助或建议。

4

3 回答 3

1

使用 启动登录活动startActivityForResult。在 login1 和 login2 中,让您登录过程,然后使用setResult(OK 或 NOK)然后finish,因此您最终进入了在启动 login1 之前的 Activity。

您将在 onActivityResult 中收到结果,您将在其中测试结果值并采取相应措施(登录或未登录)。

更多信息:http: //developer.android.com/reference/android/app/Activity.html#StartingActivities

于 2013-06-06T12:29:27.380 回答
1

一种可能的解决方案如下所示:

public class A extends Activity {

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

        //...

        Intent intent = new Intent(this, Login1.class);
        intent.putExtra("redirectToComponent", 
                new ComponentName(this, B.class));
        startActivity(intent);
    }
}

class Login1 extends Activity {

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

        //...

        Intent intent = new Intent(this, Login2.class);
        intent.putExtra("redirectToComponent", 
                getIntent().getParcelableExtra("redirectToComponent"));
        startActivity(intent);
    }
}

class Login2 extends Activity {

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

        //...

        ComponentName component = (ComponentName) getIntent().getParcelableExtra(
                "redirectToComponent");
        if(component != null) {
            Intent redirectIntent = new Intent();
            redirectIntent.setComponent(component);
            startActivity(redirectIntent);
        }
    }
}

class B extends Activity {
    //...
}
于 2013-06-06T12:49:27.867 回答
0

您可以在登录后使用putExtra传递所需活动的名称(字符串)以启动或重定向登录活动,并在登录后添加一个条件以检查哪个字符串表示要重定向的活动。

例子:

A->(**putExtra("B")**)->login1->login2->(**getExtra, condition**)->B
X->(**putExtra("Y")**)->login1->login2->(**getExtra, condition**)->Y
于 2013-06-06T12:44:19.673 回答