2013-03-03 1 views
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); 
} 
} 

Я хочу, чтобы получить имя перечисления из его Drawable активности. Другими словами, когда я предоставляю 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) 

ответ

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; 
    } 
} 
+0

Я сделал это, но в этой деятельности я столкнулся с некоторыми ошибками в действии. Я отправляю сообщение и сообщение об ошибке немного. – ocry

+0

Я отредактировал мой вопрос с моей деятельностью и ошибками. – ocry

+0

ooops ... Я нашел ошибку. Вам нужно назначить поле 'resource' в конструкторе' Names'. 'this.resource = resource;' Проверьте мой обновленный ответ. –

Смежные вопросы