2012-03-16 6 views
0

У меня есть опции Activity, где я выбираю цвет с помощью RadioButton. По умолчанию установлен цвет Whiteandroid:checked="true". Теперь, когда я добираюсь до своего Canvas, мне нужно динамически менять цвет Paint в зависимости от того, какой был выбран RadioButton. Вот код, который я пробовал:Изменение цвета объекта Paint динамически в Android

  String radioButtonSelected = ""; 
      switch (checkedRadioButton) { 
       case R.id.CheckRed : radioButtonSelected = "Red"; 
               break; 
       case R.id.CheckBlue : radioButtonSelected = "Blue"; 
              break; 
       case R.id.CheckWhite : radioButtonSelected = "White"; 
              break; 
      } 
      Intent i = new Intent(HandwritingRecognitionOptionTab.this,HandwritingRecognitionCanvas.class); 
      i.putExtra("setColor",radioButtonSelected); 
      //startActivity(i); // because I don't want to start the activity immediately after this 

В классе Canvas:

 Bundle getValue = getIntent().getExtras(); 
     drawColor = getValue.getString("setColor"); 
     if(drawColor.equals("White")) 
      intColor = 1; 
     if(drawColor.equals("Red")) 
      intColor = 2; 
     if(drawColor.equals("Blue")) 
      intColor = 3; 


     mPaint = new Paint(); 
     mPaint.setDither(true); 
     mPaint.setColor(Color.WHITE); 
     if(intColor == 1) 
      mPaint.setColor(Color.WHITE); 
     if(intColor == 2) 
      mPaint.setColor(Color.RED); 
     if(intColor == 3) 
      mPaint.setColor(Color.BLUE); 

Но я получаю NullPointerException когда Activity для Canvas запускается. Важно отметить, что по умолчанию белый цвет должен быть цветом. Кроме того, это не сохраняет его настойчиво? Должен ли я заглядывать в SharedPreferences?

+0

Если это не точка, из которой вы начинаете второе действие, вы можете поместить соответствующий код из того места, где вы начинаете второе действие. – Deva

+0

Я не запускаю другую деятельность из этой деятельности. У меня возникает ощущение, что я совершенно ошибаюсь в этом подходе, т. Е. Выбирая putExtra(). –

ответ

1

После прочтения ваших комментариев, похоже, что вы не запускаете другую деятельность с использованием данного намерения и, следовательно, исключение NullPointerException, поскольку Bundle не будет содержать одну и ту же строку в следующем действии.

Вы можете выбрать для следующих вариантов:

1> Shared Prefrences (As highlighted by you) 
2> Some DB entry. 
3> Some file storage 
4> Singleton pattern 

но для меня лучшим вариантом был бы общий prefrence. Вы также можете посмотреть на это link для получения дополнительной информации

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