簡體   English   中英

單擊按鈕時如何更改圖像?

[英]How do I change an image when clicking a button?

所以當我單擊下面的按鈕時,我試圖更改圖像。 我試圖將手機從普通模式切換到靜音模式,並根據手機的狀態更改圖片。

我正在看書,不知道出了什么問題(我不是在復制粘貼cuz會造成問題)。 好消息。 盡管將手機切換到靜音模式后圖片不會改變,但是當我在靜音模式已打開的情況下重新打開應用程序時,圖片會變為靜音模式時的圖像。 當我將其切換回正常模式時,它可以工作,但是直到我關閉並重新打開應用程序並且系統讀取手機狀態后,它的圖像才會改變。 我不知道怎么了,但是我的代碼如下:

private AudioManager mAudioManager;
    private boolean mPhoneIsSilent;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.linear);

   mAudioManager= (AudioManager)getSystemService (AUDIO_SERVICE);
    checkIfPhoneIsSilent();
   setButtonClickListener(); 
   toggleUi();
}


private void setButtonClickListener(){

    Button toggleButton=(Button) findViewById(R.id.toggleButton);
    toggleButton.setOnClickListener(

            new View.OnClickListener(){

                public void onClick(View v){

                    if (mPhoneIsSilent){
                        mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
            mPhoneIsSilent=false;
            }
            else{
                mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
            mPhoneIsSilent=true;
            }
        }

    }
            );
}



private void toggleUi() {
    ImageView imageView=(ImageView)findViewById(R.id.phone_icon);
    Drawable newPhoneImage;
    if(mPhoneIsSilent)
        newPhoneImage=getResources().getDrawable(R.drawable.mute);
    else
        newPhoneImage=getResources().getDrawable(R.drawable.unmute);
    imageView.setImageDrawable(newPhoneImage);
    setContentView(R.layout.linear);
}


    private void checkIfPhoneIsSilent()
    {
        int ringerMode=mAudioManager.getRingerMode();
        if(ringerMode==AudioManager.RINGER_MODE_SILENT)
            mPhoneIsSilent=true;
        else mPhoneIsSilent=false;
    }

這是與之配套的XML:

       <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

 <ImageView
      android:id="@+id/phone_icon"               
      android:layout_width="wrap_content"               
      android:layout_height="wrap_content"               
      android:layout_gravity="center_horizontal"               
      android:src="@drawable/unmute" />
 <Button 
     android:id="@+id/toggleButton"         
     android:layout_width="wrap_content"         
     android:layout_height="wrap_content"          
     android:layout_gravity="center_horizontal"         
     android:text="Toggle Silent Mode"/>

</LinearLayout>

您的代碼中有兩個錯誤

1.setButtonClickListener(); 在您的活動中調用過一次,即在onCreate() 因此,您的按鈕OnClickListener()將可以工作一次!

2.toggleUi()內部不要使用setContentView(R.layout.linear);

解決方案1。

在您的 onCreate() 使用以下代碼

Button toggleButton = (Button) findViewById(R.id.toggleButton);
        toggleButton.setOnClickListener(

        new View.OnClickListener() {

            public void onClick(View v) {

                if (mPhoneIsSilent) {
                    mAudioManager
                            .setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                    mPhoneIsSilent = false;
                    toggleUi();
                } else {
                    mAudioManager
                            .setRingerMode(AudioManager.RINGER_MODE_SILENT);
                    mPhoneIsSilent = true;
                    toggleUi();
                }
            }

        });

並從onCreat()刪除這兩行代碼

setButtonClickListener(); 
   toggleUi();

還要完全刪除您的private void setButtonClickListener()


解決方案2。

您的toggleUi() 應該是:

private void toggleUi() {
        ImageView imageView = (ImageView) findViewById(R.id.phone_icon);
        Drawable newPhoneImage;
        if (mPhoneIsSilent)
            newPhoneImage = getResources().getDrawable(R.drawable.edit_btn);
        else
            newPhoneImage = getResources().getDrawable(R.drawable.ic_launcher);
        imageView.setImageDrawable(newPhoneImage);

    }

這是簡單的答案

ImageView imageView;
private void toggleUi() {
        imageView=(ImageView)findViewById(R.id.phone_icon);
        Drawable newPhoneImage;
        if(mPhoneIsSilent)
            imageView.setImageResource(R.drawable.mute);
        else
            imageView.setImageResource(R.drawable.unmute);
    }

您的點擊事件將是

私人void setButtonClickListener(){

    Button toggleButton=(Button) findViewById(R.id.toggleButton);
    toggleButton.setOnClickListener(

            new View.OnClickListener(){

                public void onClick(View v){

                    if (mPhoneIsSilent){
                        mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
            mPhoneIsSilent=false;
            }
            else{
                mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
            mPhoneIsSilent=true;
            }
            toggleUi();
        }

    }
            );
}

更改電話的狀態后,請勿在OnClickListener中調用toggleUi() 因此按鈕不會更新。

加入到呼叫toggleUi()作為最后一行onClick(View view)你的方法OnClickListener 那應該有幫助。 並且也使用dinesh sharma的簡化方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM