2010-09-15 35 views
6

Màn hình hiển thị bốn nút. Khi nhấn nút, trình phát phương tiện sẽ phát âm thanh. Vấn đề tôi đang gặp là triển khai setClickable cho tất cả các nút cùng một lúc.Android. Làm cách nào để đặt tất cả các nút có thể nhấp hoặc không thể nhấp vào cùng một lúc bằng cách sử dụng setClickable?

Khi một nút được nhấp, tôi muốn tất cả các nút không thể nhấp được cho đến khi trình phát đa phương tiện kết thúc phát âm thanh được kết hợp với lần nhấp nút. Sau đó, tôi muốn tất cả các nút được đặt trở lại thành có thể nhấp.

Mã chạy tốt cho đến khi tôi bật mã setClickable - mã cho buttonOne bị tắt trong mẫu mã của tôi bên dưới. Điện thoại thử nghiệm khóa và cho tôi biết ứng dụng đã dừng và thử lại.

Thật không may, không có setClickable, người dùng có thể nhấn bất kỳ nút nào và nghe thấy bất kỳ âm thanh nào trước khi âm thanh được chọn đầu tiên kết thúc phát.

Cảm ơn bạn đã dành thời gian và trợ giúp.

import android.app.Activity; 
import android.app.AlertDialog; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 
import android.widget.ImageButton; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnCompletionListener; 


public class hipsterdoofus extends Activity 
{ 
private int asoundfilenumber;//integer id of sound file to be played 

public ImageButton buttonOne; 
public ImageButton buttonTwo; 
public ImageButton buttonThree; 
public ImageButton buttonFour; 


public void myClickHandler(View v) { 



    switch (v.getId()) 
     { 

     case R.id.buttonOne: 
     asoundfilenumber=0x7f040000; 
     break; 

     case R.id.buttonTwo: 
     asoundfilenumber=0x7f040001; 
     break; 

     case R.id.buttonThree: 
     asoundfilenumber=0x7f040002; 
     break; 

     case R.id.buttonFour: 
     asoundfilenumber=0x7f040003; 
     break; 



     }//closes switch test 



    freezeButtonsAndPlaySoundThenUnfreezeButtons(); 

    }//closes onClick 


    public void freezeButtonsAndPlaySoundThenUnfreezeButtons() 
{ 

    **//buttonOne.setClickable(false);//sets buttonOne to unclickable** 

    MediaPlayer mp = MediaPlayer.create(getBaseContext(), asoundfilenumber); 
    mp.start(); 


    mp.setOnCompletionListener(new OnCompletionListener()//listens for player to finish then releases player 
    { 

    @Override 
    public void onCompletion(MediaPlayer mpalmost) 
    { 
    mpalmost.release(); 
    } 



    }); 

    **//buttonOne.setClickable(true); //sets buttonOne to clickable** 

} 


public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

    } 

Trả lời

4

tôi nghĩ rằng các tài sản mà bạn đang tìm kiếm sẽ được setEnabled (set với boolean)

một số mã;

public void enableDisableButtons(Boolean state){ 
    buttonOne.setEnabled(state); 
    buttonTwo.setEnabled(state); 
    buttonThree.setEnabled(state); 
    buttonFour.setEnabled(state); 
} 

public void freezeButtonsAndPlaySoundThenUnfreezeButtons() 
{ 
    enableDisableButtons(false); // disable buttons 

    MediaPlayer mp = MediaPlayer.create(getBaseContext(), asoundfilenumber); 
    mp.start(); 


    mp.setOnCompletionListener(new OnCompletionListener()//listens for player to finish then releases player 
    { 

     @Override 
     public void onCompletion(MediaPlayer mpalmost) 
     { 
      enableDisableButtons(true); // Re-enable buttons 
      mpalmost.release(); 
     } 
     }); 
} 
+0

cảm ơn bạn đã trả lời nhanh chóng của bạn. Tôi sẽ thử cái này. – John

+0

Cảm ơn bạn Damon. – John

+0

Tôi đã sử dụng kỹ thuật của bạn về phương thức boolean state - tôi đã sử dụng setClickable bên trong phương thức kể từ khi tôi sử dụng phương thức myClickHandler. – John

1

Nếu bạn muốn vô hiệu hóa một nút sử dụng phương pháp setEnabled (false) của lớp View

Các vấn đề liên quan