0

私はこのような列挙型クラスを持っています:

public enum Names {

Logo1(R.drawable.adese,"Adese"),
Logo2(R.drawable.afra,"Afra");

private int resource;
private String description;
private Names(int resource, String description){
    this.description = description;
}

public boolean isCorrect(String input){
return input.equals(description);
}
}

ドローアブルのアクティビティから列挙型の名前を取得したいと思います。つまり、R.drawable.adeseをメソッドに提供するときに、Logo1を取得したいと思います。そして、R.drawable.afraを提供するとき、Logo2などを取得したいと思います。どうやってやるの?

私の活動では

Names name;
.
.
.
id = R.drawable.adese;
name = Names.forDrawable(id);
    check.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            a=name.isCorrect(text.getText().toString());
            if(a==true){
            Intent intent = new Intent(LogoActivity.this, LevelSelectionActivity.class);
            startActivity(intent);
        }
        }
        });

チェックボタンなどはアクティビティで宣言されていますが、ここでは短縮するために書きませんでした。

そして、私はエラーメッセージを受け取りました:

03-03 12:16:27.125: E/AndroidRuntime(6091): FATAL EXCEPTION: main
03-03 12:16:27.125: E/AndroidRuntime(6091): java.lang.NullPointerException
03-03 12:16:27.125: E/AndroidRuntime(6091):     at         com.example.turkishlogoquiz.LogoActivity$1.onClick(LogoActivity.java:57)
03-03 12:16:27.125: E/AndroidRuntime(6091):     at android.view.View.performClick(View.java:4223)
03-03 12:16:27.125: E/AndroidRuntime(6091):     at android.view.View$PerformClick.run(View.java:17275)
03-03 12:16:27.125: E/AndroidRuntime(6091):     at android.os.Handler.handleCallback(Handler.java:615)
03-03 12:16:27.125: E/AndroidRuntime(6091):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-03 12:16:27.125: E/AndroidRuntime(6091):     at android.os.Looper.loop(Looper.java:137)
-03 12:16:27.125: E/AndroidRuntime(6091):   at android.app.ActivityThread.main(ActivityThread.java:4898)
03-03 12:16:27.125: E/AndroidRuntime(6091):     at java.lang.reflect.Method.invokeNative(Native Method)
03-03 12:16:27.125: E/AndroidRuntime(6091):     at java.lang.reflect.Method.invoke(Method.java:511)
03-03 12:16:27.125: E/AndroidRuntime(6091):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
03-03 12:16:27.125: E/AndroidRuntime(6091):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
03-03 12:16:27.125: E/AndroidRuntime(6091):     at dalvik.system.NativeStart.main(Native Method)
4

1 に答える 1

2

Namesドローアブル リソースの値を返す静的メソッドを作成するだけです。

public enum Names {
    Logo1(R.drawable.adese,"Adese"),
    Logo2(R.drawable.afra,"Afra");

    private int resource;
    private String description;

    private Names(int resource, String description) {
        this.resource = resource;
        this.description = description;         
    }

    public boolean isCorrect(String input){
        return input.equals(description);
    }

    public static Names forDrawable(int resourceId) {
        for (final Names name : Names.values()) {
            if (name.resource == resourceId) {
                return name;
            }
        }

        return null;
    }
}
于 2013-03-03T10:05:01.250 に答える