2016-05-03 3 views
-1

У меня есть изображение, которое я использую в качестве кнопки, я настроил метод onclick и внутри него объявил оператор switch, мне нужно каждый раз, когда я нажимаю кнопку, я должен вызвать другой случай , поэтому я устанавливаю случай 0, случай 1, случай 2, случай 3, и я помещаю методы, которые я хочу для каждого случая, однако каждый раз, когда я нажимаю кнопку, дела, кажется, смешиваются вместе, он вызывает только случай 0 и случай 3, я не знаю, что не так, я использую этот код для более старого проекта, и он работал хорошо, но теперь я не вижу, что происходит не так.Оператор переключения Android работает неправильно

Вот мой код:

// i tried to use static, final int but still it's the same problem. 
private int textnumber = 0; 
button_text.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      switch (textnumber) { 

     case 0: 
      //changeTextColor(int) method, for each number it changes the text's color. 
      changeTextColor(1); 
      Toast.makeText(getApplicationContext(),"text color is 1",Toast.LENGTH_SHORT).show(); 
      break; 
     case 1: 
      changeTextColor(2); 
      Toast.makeText(getApplicationContext(),"text color is 2",Toast.LENGTH_SHORT).show(); 
      break; 
     case 2: 
      changeTextColor(3); 
      Toast.makeText(getApplicationContext(),"text color is 3",Toast.LENGTH_SHORT).show(); 
      break; 
     case 3: 
      changeTextColor(4); 
      Toast.makeText(getApplicationContext(),"text color is 4",Toast.LENGTH_SHORT).show(); 
      break; 

    } 

     } 
    }); 

private void changeTextColor(int id){ 
    //mRenderer is a class that uses GLES 2.0 (glsurfaceview etc...); 
    //mObjectsData is a class that i use to store different datas 
    if(id == 1){ 
    textnumber = 1; 
    mObjectsData.mTextColor = "yellow"; 
    mRenderer.requestRender(); 
    } 
    else if(id == 2){ 
     textnumber = 2; 
     mObjectsData.mTextColor = "green"; 
     mRenderer.requestRender(); 
    } 
    else if(id == 3){ 
     textnumber = 3; 
     mObjectsData.mTextColor = "blue"; 
     mRenderer.requestRender(); 
    } 
    else if(id == 4){ 
     textnumber = 4; 
     mObjectsData.mTextColor = "red"; 
     mRenderer.requestRender(); 
    } 
} 
+1

does changeTextColor change textnumber variable? Можете ли вы показать нам этот код? –

+0

@MattWolfe проверяет изменения, пожалуйста! –

+0

После одного полного цикла ваш коммутатор больше не будет выполняться, так как вы устанавливаете значение textnumber в 4 в вашем последнем случае, если в changeTextColor(). Это может быть проблема? – Levon

ответ

0

Может быть, вы сделали ту же ошибку, как и я. Посмотрите на мой старый вопрос

android studio OnClicklistener no reaction on first Click

Моя ошибка была установить onclicklistener и объявить кнопку. Я должен был сделать только одно.

+0

Я использую только src, width, height и id внутри макета .xml –

1

Казалось бы, вы должны изменить переменную textnumber в другом месте. Нет ничего волшебного в отношении оператора switch или студии Android, которая заставит его изменить вашу переменную без причины. Постскриптум Ваш код может быть значительно уменьшен до этого:

private int textnumber = 0; 
private String[] colors = new String[] { "yellow", "green", "blue","red" }; 

//some method 
    button_text.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      int oldColor = textnumber; 
      textnumber = (textnumber + 1) % 4; 
      Toast.makeText(getApplicationContext(),"text color is " + textnumber,Toast.LENGTH_SHORT).show(); 
      mObjectsData.mTextColor = colors[oldColor]; 
      mRenderer.requestRender(); 

     } 
    }); 
Смежные вопросы