启动活动的动态意图参数

ErT*_*rTR 1 java android android-intent android-activity

我想创建一种启动活动的方法。我不想每次都这样写:

Intent intent = new Intent(this, LoginActivity.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

相反,我想像这样使用它:(使用 1 行而不是 2 行)

ShowActivity(LoginActivity);
Run Code Online (Sandbox Code Playgroud)

通过使用这样的自定义方法:

public void ShowActivity(Activity act)
{
    Intent intent = new Intent(this, act.class);
    startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)

并且可能进一步超载:

public void ShowActivity(Activity act, boolean finish)
{
    Intent intent = new Intent(this, act.class);
    startActivity(intent);

    if(finish)
        CurrentActivity.this.finish();
}
Run Code Online (Sandbox Code Playgroud)

不管怎样,它给出了找不到符号错误(我不知道为什么它是cannot而不是cannot顺便说一下)。是否可以这样做,如果可以,这样做合理吗?(最后一个)如果是,为什么不嵌入 1 行方法来执行此操作?

作为一个 Java 菜鸟,我是否认为这种方法过于“C#ish”?

提前致谢。

PS我是一个 Java 和 Android 菜鸟,所以我什至不确定问题的标题。我不知道如何更好地提问,因此我无法正确搜索这个问题是否重复。如果是这样的话,抱歉。

Spa*_*Bao 5

定义一个 util 类,如下所示:

public class AcitivtyUtil {
    public static void showActivity(Activity from, Class<?> to, boolean finish) {
        Intent intent = new Intent(from, to);
        from.startActivity(intent);
        if (finish) {
            from.finish();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ActivityUtil.showActivity(this, TargetActivity.class, true|false)然后您可以在任何活动中调用。

您的代码中出现一些错误:

public void ShowActivity(Activity act)  // here you can't pass a Activity object as parameter, you should pass Class<?>, so it should be act.class
{
    Intent intent = new Intent(this, act.class);
    startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)

如果你不想使用util类,你也可以showActivity()在你的Activity类中定义它作为成员方法,建议在BaseActivity中定义它,这样你就不需要在所有Activity中重复它。

public void showActivity(Class<?> to, boolean finish) {
    Intent intent = new Intent(this, to);
    startActivity(intent);
    if (finish) {
        finish();
    }
}
Run Code Online (Sandbox Code Playgroud)