2015-03-12 3 views
0

У меня есть десять кнопок, и только один из них имеет красный фон в любой момент времени, а красная кнопка имеет onClicklistener. Когда эта красная кнопка нажата, одна из этих десяти кнопок в случайном порядке получит красный фон, и эта новая красная кнопка должна использовать предыдущий onCLickListener, и когда эта новая красная кнопка будет нажата снова, одна из этих десяти кнопок в случайном порядке получает красный фон, а onClickListener должен быть назначен ему, и есть счетчик, который подсчитывается каждый раз, когда нажимается RedButton.Android: Как установить onClickListener на другую кнопку при нажатии

Пример: Есть четыре кнопки [WhiteButton WhiteButton RedButton WhiteButton] и только RedButton имеет onClickListener когда RedButton нажата одна из кнопок цвет меняется на красный [WhiteButton RedButton WhiteButton WhiteButton] , когда эта новая RedButton нажата кнопки становятся [WhiteButton WhiteButton WhiteButton RedButton]

Я могу изменить цвет одной из десяти кнопок на красный, когда RedButton щелкают в первый раз, но не в состоянии установить OnClickListener к новому RedButton.

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ourButton = (Button) findViewById(R.id.button); 
    ourTextView = (TextView) findViewById(R.id.textView); 

    buttons[0] = (Button) findViewById(R.id.button2); 
    buttons[1] = (Button) findViewById(R.id.button3); 
    buttons[2] = (Button) findViewById(R.id.button4); 
    buttons[3] = (Button) findViewById(R.id.button5); 

    Random r = new Random(); 
    oddValue = r.nextInt(4 - 0); 
    buttons[oddValue].setBackgroundColor(Color.RED); 

    buttons[oddValue].setOnClickListener(new ourOnClickListener(this)); 

ourOnClickListener

public class ourOnClickListener implements OnClickListener{ 
    MainActivity caller; 
    private int count; 


    public ourOnClickListener(MainActivity activity) { 
     this.caller = activity; 
     this.count = 0; 

    } 

    public void onClick(View view) { 
     int i; 
     count = count + 1; 
     Random r = new Random(); 

     int oddValue_new = r.nextInt(4 - 0); 

     caller.buttons[oddValue_new].setBackgroundColor(Color.RED); 
     caller.ourTextView.setText("Count : " + count); 

    } 

} 

ответ

0

Вы можете сделать это так же, как вы установите цвет фона:

caller.buttons[oddValue_new].setOnClickListener(this); 

Так как вы onClickListener вы можете сослаться на это как новый onClickListener ,

0
  • Если вы хотите, чтобы можно было щелкнуть только красную кнопку. Вы можете установить Enabled равным false для всех (исключить красную кнопку). Таким образом, вы будете устанавливатьOnClickListener для всех кнопок.

  • Если все кнопки можно щелкнуть, активируйте действие только при нажатии кнопки Red. Вы должны проверить, нажал кнопку, и сравнить, если это Красная кнопка в случае Нажмите

  • Удалить OnClickListener из всех кнопок «setOnClickListener (NULL)», и SetOnClickListener на Красной

+0

Я думаю, вы поняли вопрос. – Deutro

0

Я бы решить эту немного иначе.

  1. Сохраните ссылку на кнопку с красным фоном redButton.

  2. Все кнопки имеют одинаковые onClick. В onClick просто убедитесь, что нажата кнопка с красным фоном (просто проверьте по ссылке). Если нет - ничего не делайте. Если да: выберите новую кнопку, измените фон и сохраните ссылку на новую кнопку.

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

public void onClick(View view) { 
    if (view == redButton) { 
     redButton.setBackgroundColor(Color.WHITE); 
     Random r = new Random(); 
     int oddValue_new = r.nextInt(4 - 0); 
     redButton = buttons[oddValue_new]; 
     redButton.setBackgroundColor(Color.RED); 
    } 
} 

UPDATE

Как @Mr Фук 87 предложили вы можете использовать enabled. Я думаю, что это очень хороший подход. В дополнение к enabled вы можете использовать state-list. Создайте список состояний, которые имеют белый фон для android:state_enabled=false и красный фон для android:state_enabled=true. Теперь все, что вам нужно, это просто изменить ваше свойство кнопок enabled.

OnClick должно выглядеть:

public void onClick(View view) { 
    redButton.setEnabled(false); 
    Random r = new Random(); 
    int oddValue_new = r.nextInt(4 - 0); 
    redButton = buttons[oddValue_new]; 
    redButton.setEnabled(true); 

} 

state-list должно выглядеть (поставить его в drawable):

<selector xmlns:android="http://schemas.android.com/apk/res/android" 
    <item android:state_selected="false" android:[email protected]/white /> 
    <item android:state_selected="true" android:drawable=red_here /> 
</selector> 
Смежные вопросы