【问题标题】:Android. How do I set all buttons clickable or unclickable at same time using setClickable?安卓。如何使用 setClickable 将所有按钮同时设置为可点击或不可点击?
【发布时间】:2011-04-12 18:11:24
【问题描述】:

屏幕显示四个按钮。当按下按钮时,媒体播放器会播放声音。我遇到的问题是同时为所有按钮实现 setClickable。

单击按钮后,我希望在媒体播放器完成播放与按钮单击相关的声音之前,所有按钮都无法单击。然后我希望将所有按钮设置回可点击。

在我启用 setClickable 代码之前,代码运行良好——在下面的代码示例中, buttonOne 的代码被禁用。测试手机锁定并告诉我应用程序已停止并重试。

不幸的是,如果没有 setClickable,用户可以在第一个选定的声音播放完之前按下任何按钮并听到任何声音。

感谢您的时间和帮助。

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 );

    }

【问题讨论】:

    标签: android button click clickable


    【解决方案1】:

    我认为您要查找的属性是 setEnabled(使用布尔值设置)

    一些代码;

    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();
            }
          });
    }
    

    【讨论】:

    • 我使用了你的布尔状态方法技术——我确实在方法内部使用了 setClickable,因为我使用的是 myClickHandler 方法。
    • 我遇到的另一个问题是我遗漏了 buttonOne = (ImageButton)findViewById(R.id.buttonOne);在我的公共 void onCreate(Bundle savedInstanceState) 中。并且您在媒体播放器发布之前放置 enableDisable 调用使代码功能。再次感谢。
    【解决方案2】:

    如果要禁用按钮,请使用 View 类的 setEnabled(false) 方法

    【讨论】:

      猜你喜欢
      • 2020-01-17
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多