Android:将目标活动存储在捆绑包中

时间:2011-11-22 17:18:20

标签: android class android-intent bundle

所以我正在研究这个项目,它的规模相当大。我已经安装了一种“幕后”安全登录系统。

实际上,所有活动都扩展了subActivity类和subActivity范围Activity。这使我能够在开始新活动时自动.putExtra()创建每个表单,并且在每个onCreate()它将检查传入的数据并确定是否应该强制用户登录(将它们推送到LoginActivity)。

现在,登录活动在成功登录后会加载到MainActivity。我希望它动态加载用户最后的活动...

这意味着,存储在其他内容中启动LoginActivity的活动的类,然后在成功登录时使用LoginActivity,从附加内容中获取类并使用它来启动Activity

我正在寻找最简单的方法,我正在尝试序列化,但是遇到了很多问题,并且认为必须有另一种方法来传递对“目标”类的引用。

希望这是有道理的!

干杯

3 个答案:

答案 0 :(得分:1)

您可以使用Java反射API:

按如下方式调用您的登录活动:

Intent intent = new Intent(this, LoginActivity.class);
intent.putExtra("activity", getClass().getName());
startActivity(intent);

然后在登录活动中解析调用活动的名称,并在成功登录后返回到该名称:

private String mActivity;

@Override public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);
    // ...

    mActivity = "";
    Bundle extras = getIntent().getExtras();
    if (extras != null)
        mActivity = extras.getString("activity");
    }
}

@Override public void onClick(View view)
{
    try {
        Class<?> cls = Class.forName(mActivity);
        startActivity(new Intent(this, cls));
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

答案 1 :(得分:0)

LoginActivity中,只需调用finish(),它将返回到堆栈上的下一个Activity,在您的情况下返回上一个。

答案 2 :(得分:0)

您可以通过startActivityForResult启动登录活动,然后检查主活动中的登录活动结果。看这里http://developer.android.com/reference/android/app/Activity.html#StartingActivities