带有枚举的startActivityForResult

时间:2014-03-14 22:00:00

标签: java android eclipse enums

我正在编写一个Android应用程序,我有一个主屏幕,启动不同的播放模式(不同的活动)。我想使用开始每个活动的结果 startActivityForResult(),其中requestCode等于每种游戏类型的常量(简单,中等,硬)。我试图用枚举来做这件事,但是日食告诉我startActivityForResult(Intent i, int request code) is not applicable for arguments (Intent, [name of my enum class])。我尝试用内部类实现它,但它不起作用。

我希望利用枚举,以便代码在onActivityResult()中更具可读性(即检查resultCode == EASY而不是resultCode == 1)。

根据我的理解,Enums的行为与整数相同。如果我错了,请纠正我。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您可以为每种类型创建一个最终变量:

final int EASY =0;
final int MEDIUM= 0;

并在代码中使用这些值。

答案 1 :(得分:0)

你可以通过多做一些工作来做这样的事情:

public enum MyActivityResult {
    OK(0),
    CANCELED(1),
    SOMETHING_ELSE(2)
    UNKNOWN(3);

    public final int value;

    MyActivityResult(int value) {
        this.value = value;
    }

    public static MyActivityResult fromValue(int value) { 
        for (MyActivityResult result : values()) {
            if (result.value == value) return result;
        }
        return UNKNOWN;
    }
}

然后,在Activity

setResult(MyActivityResult.SOMETHING_ELSE.value);
finish();

在您的onActivityResult()

MyActivityResult result = MyActivityResult.fromValue(resultCode);

这是很多额外的代码,老实说,你仍然最终传递一个整数(即Activity不需要发送有效的结果)所以我不一定建议这样做,但它如果你想在结果中添加行为,这是一种方法。