2012-05-28 4 views
0

В моем приложении у меня есть 3 кнопки A, B, C. при нажатии кнопки A я выполняю некоторые вычисления, которые занимают некоторое время ... в этот период я ​​хочу отключить две другие кнопки. Я обеспечиваю код для слушателя OnClick для одной кнопки ..Отключение других кнопок при нажатии другой кнопки

case R.id.buttona: 

    //Disabling other two buttons 
    start1b.setVisibility(v.INVISIBLE); 
    start1c.setVisibility(v.INVISIBLE); 
    stop1.setVisibility(v.INVISIBLE); 

     //this is the process that takes time 
    String x ="/databank/Reading18.wav"; 
    timedata1a = fe.returningtimedata(x); 

    rawdata1a = fe.returningrawdata(x); 
    Log.d("now press", "button"); 

    //features of Reading 1 hav been extracted into timedata1a 
    start1b.setVisibility(v.VISIBLE); 
    start1c.setVisibility(v.VISIBLE); 
    stop1.setVisibility(v.VISIBLE); 

break; 

, но когда я нажимаю кнопку 1 A, а затем сразу же нажмите кнопку В, сила приложение закрывается .. может any1 помочь ??

+1

Добро пожаловать в прекрасный, замечательный мир резьбы! Вы захотите поместить все трудоемкие процессы в свои потоки. Это позволит вам немедленно отключить кнопки, исключая ваше фатальное исключение. – gobernador

ответ

1

Вам необходимо выполнить операции, которые вы хотите выполнить в отключенном состоянии в другом потоке, чем пользовательский интерфейс. вызвать поток событий никогда не получает времени, чтобы отключить кнопки. Таким образом, вы можете сделать следующее:

case R.id.buttona: 

    //Disabling other two buttons 
    start1b.setVisibility(v.INVISIBLE); 
    start1c.setVisibility(v.INVISIBLE); 
    stop1.setVisibility(v.INVISIBLE); 

    Thread thread=new Thread() 
    { 
     public void run() 
     { 

       //this is the process that takes time 
        String x ="/databank/Reading18.wav"; 
        timedata1a = fe.returningtimedata(x); 

       rawdata1a = fe.returningrawdata(x); 
       Log.d("now press", "button"); 
       handler.sendEmptyMessage(1); 



      } 
     } 
     thread.start(); 
     break; 
    } 

Вам нужно определить обработчик, чтобы отправлять результаты обратно в UI потоке после того, как поток processiing завершается.

Handler handler=new Handler(); 
{ 
    public void handleMessage(Message msg) 
    { 
     int what=msg.what; 
     switch(what) 
     { 
      case 1: 
        { 
         //features of Reading 1 hav been extracted into timedata1a 
        start1b.setVisibility(v.VISIBLE); 
        start1c.setVisibility(v.VISIBLE); 
        stop1.setVisibility(v.VISIBLE); 
        } 
        break; 
      ......... 
     } 
    } 
}; 
+0

can u plz указать, где я должен определить функцию handleMessage >> – Kumar

+0

в вашем классе активности – jeet

+0

thank u jeet .. it works – Kumar

0

В вашем случае, если вы хотите отключить Кнопки B, C при выполнении OnClick() операция на кнопку А

btnA.setOnClickListerner(new OnClickListerner() { 

public void onClick(){ 

btnB.setEnabled(false); 

btnC.setEnabled(false); 

} 

}); 

В приведенном выше коде при нажатии на кнопки A Кнопка B, C отключенным ,

+0

это не работает .. srikanth .. кнопки donot отключиться .. plz указать – Kumar

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