2015-10-22 5 views
1

В приложении, когда я пытаюсь проверить серое значение и нажимаю кнопку, мое приложение отключается. Все остальные переключатели работают отлично, но всякий раз, когда я пытаюсь изменить цвет фона моего макета через серая кнопка, приложение падает. P.S когда я удалил instructionlayout.setBackgroundResource(R.color.grey); из кода, серый тоже работал просто отлично и поджарил «Серый». Пожалуйста, помогите мне в том, как изменить цвет фона на всех моих макетах без сбоя приложения..setBackgroundResource crashing my app

public void setter(View setv) 
{ 
    RelativeLayout instructionlayout = (RelativeLayout)findViewById(R.id.instructionslayout); 
    switch(setv.getId()) 
    { 
     case R.id.changecolorbtn: 
      int id = SelectedRadioButton(); 
      switch(id) 
      { 
       case 1:toost("Original");break; 
       case 2:toost("Grey");instructionlayout.setBackgroundResource(R.color.grey);break;//problem is here 
       case 3:toost("Red");break; 
       case 4:toost("Orange");break; 
       case 5:toost("Yellow");break; 
       case 6:toost("Green");break; 
       case 7:toost("Aqua");break; 
       case 8:toost("Marine");break; 
       case 9:toost("Purple");break; 
       case 10:toost("Silver");break; 
       default:toost("Error! - Select An Option!"); 
      } 
      break; 
    } 
} 
public int SelectedRadioButton() 
{ 
    RadioButton original = (RadioButton)findViewById(R.id.origcolor); 
    RadioButton grey = (RadioButton)findViewById(R.id.grey); 
    RadioButton red = (RadioButton)findViewById(R.id.red); 
    RadioButton orange = (RadioButton)findViewById(R.id.orange); 
    RadioButton yellow = (RadioButton)findViewById(R.id.yellow); 
    RadioButton green = (RadioButton)findViewById(R.id.green); 
    RadioButton aqua = (RadioButton)findViewById(R.id.aqua); 
    RadioButton marine = (RadioButton)findViewById(R.id.marine); 
    RadioButton purple = (RadioButton)findViewById(R.id.purple); 
    RadioButton silver = (RadioButton)findViewById(R.id.silver); 
    int starter = 1; 
    switch(starter)//take advantage of switch falling without break statement 
    { 
     case 1:if(original.isChecked()){return 1;} 
     case 2:if(grey.isChecked()){return 2;} 
     case 3:if(red.isChecked()){return 3;} 
     case 4:if(orange.isChecked()){return 4;} 
     case 5:if(yellow.isChecked()){return 5;} 
     case 6:if(green.isChecked()){return 6;} 
     case 7:if(aqua.isChecked()){return 7;} 
     case 8:if(marine.isChecked()){return 8;} 
     case 9:if(purple.isChecked()){return 9;} 
     case 10:if(silver.isChecked()){return 10;} 
    } 
    return -1;//if nothing is checked 
} 

colors.xml:

<resources> 
<color name="original">#25383C</color> 
<color name="grey">#484849</color> 
<color name="red">#881A27</color> 
<color name="orange">#ffa500</color> 
<color name="yellow">#CDE707</color> 
<color name="green">#00ff00</color> 
<color name="aqua">#00FFCC</color> 
<color name="marine">#0C0C84</color> 
<color name="purple">#630A86</color> 
<color name="silver">#c0c0c0</color> 
</resources> 

LogCat:

10-22 10:32:49.834 17834-17834/dhruvyadav.msplit E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: dhruvyadav.msplit, PID: 17834 
java.lang.IllegalStateException: Could not execute method of the activity 
     at android.view.View$1.onClick(View.java:3983) 
     at android.view.View.performClick(View.java:4654) 
     at android.view.View$PerformClick.run(View.java:19438) 
     at android.os.Handler.handleCallback(Handler.java:733) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:146) 
     at android.app.ActivityThread.main(ActivityThread.java:5602) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
     at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.reflect.InvocationTargetException 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at android.view.View$1.onClick(View.java:3978) 

Я попытался:

View instructionlayout = (View)findViewById(R.id.instructionslayout); 
instructionlayout.setBackgroundColor(R.color.grey); 

Как я положил поток пользовательского интерфейса между моим .setBackground кодом ?

+0

http://stackoverflow.com/questions/21598165/showing-error-caused-by-java-lang-reflect-invocationtargetexception –

+0

Правильно проверьте, правильно ли привязано ваше представление viewlayout, используя 'findViewById'. Отлаживайте его по строкам и проверяйте, что команда worklayout не равна нулю. Я думаю, что вы не используете правильный идентификатор. В противном случае в действии ваш код должен работать правильно. –

ответ

0

вы используете setBackgroundColor

yourView.setBackgroundColor(R.color.your_color); 
+0

Не работает, все еще сбой – programmingandroid

0

использовать это:

instructionlayout.setBackgroundColor(Color.GRAY); 

вместо:

instructionlayout.setBackgroundResource(R.color.grey); 
+0

doest work still crashing :( – programmingandroid

0

попробовать этот

int color = getResources().getColor(R.color.original); 
instructionlayout.setBackgroundColor(color); 

или

instructionlayout.setBackgroundResource(R.color.original); 
+0

'setBackgroundResource' метод также может использовать Drawable, Bitmap, Color. – myoungjin

+0

Но ничего не работает, я провел день на этом ... – programmingandroid

+0

есть 'setter' метод в' activity'?Работы UI возможны только по основной теме деятельности. – myoungjin

0

Пожалуйста, убедитесь, что идентификатор RelativeLayout является такой же, как вы ссылки.

R.id.instructionslayout может быть R.id.instructionlayout как название объекта.

0

Пожалуйста, используйте код ниже .. Это работает для меня .. Я надеюсь, что это поможет ...

Используйте этот

instructionlayout.setBackgroundColor (GetResources(). GetColor (R.color. белый));

Вместо

instructionlayout.setBackgroundResource (R.color.grey);