2013-07-25 27 views
2

所以我试图改变一个图像,当它下面的按钮被点击。我正在尝试将手机从普通模式切换到静音模式,并根据手机的状态更改图片。单击按钮时如何更改图像?

我正在关注一本书,不知道什么是错的(我不是复制粘贴造成问题的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> 

回答

0

有你的代码中有两处错误

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

     }); 

,并删除这两行代码从onCreat()

setButtonClickListener(); 
    toggleUi(); 

也完全删除您的private void setButtonClickListener()


解决方案2.

toggleUi()应该是:

​​
+0

tarsem感谢您的回复。我尝试过,不幸的是......没有什么区别。该应用程序的作品,但图像不改变!你认为它只是模拟器吗? – alaboudi

+0

@ user2613577尝试我更新的答案,这一定会帮助你! –

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

    } 
      ); 
} 
+0

哦,这是更容易。不幸的是,它没有工作:(更多建议 – alaboudi

+0

声明你的imageview全局,然后尝试。它在我身边工作 –

+0

你也错过了在你的点击监听器中拨打toggleUi() –

0

你不叫toggleUi()在你的OnClickListener,您更改手机的状态之后。因此该按钮不被更新。

toggleUi()添加为您的OnClickListeneronClick(View view)方法的最后一行。这应该有所帮助。并使用dinesh sharma的简化方法。