2

その下のボタンがクリックされたときに画像を変更しようとしています。電話を通常モードからサイレントモードに切り替えて、電話の状態に応じて画像を変更しようとしています。

私は本を​​読んでいますが、何が悪いのかわかりません(問題を引き起こす原因となるコピーペーストではありません)。良いニュースですが。電話をサイレント モードに切り替えても画像は変わりませんが、サイレント モードが既にオンの状態でアプリを再度開くと、画像はサイレント モードのときのはずの状態に変わります。また、通常モードに戻すと機能しますが、アプリを閉じて再度開き、システムが電話の状態を読み取るまで、画像は変更されません。何が悪いのかわかりませんが、私のコードは次のとおりです。

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>
4

3 に答える 3

0

あなたのコードには2つの間違いがあります

1.これsetButtonClickListener();はあなたの活動で一度呼び出されましたonCreate()。あなたのrボタン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();
                }
            }

        });

からこれらの2行のコードを削除します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);

    }
于 2013-07-25T04:22:52.693 に答える
0

toggleUi()電話の状態を変更した後、OnClickListener を呼び出しません。したがって、ボタンは更新されません。

のメソッドのtoggleUi()最後の行としてへの呼び出しを追加します。それは役立つはずです。dinesh sharma の簡略化された方法も使用します。onClick(View view)OnClickListener

于 2013-07-26T04:53:36.387 に答える
0

ここに簡単な答えがあります

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

あなたのクリックイベントは

プライベートボイド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();
        }

    }
            );
}
于 2013-07-25T05:05:12.320 に答える