因此,当单击图像下方的按钮时,我正在尝试更改图像。我正在尝试将手机从正常模式切换到静音模式,并根据手机状态更改图片。
我在看一本书,不知道哪里出了问题(我不是复制粘贴,因为这会造成问题)。不过这是个好消息。虽然当手机切换到静音模式时,图片不会改变,但当我在静音模式打开的情况下重新打开应用程序时,图像会变为静音时的样子。当我将其切换回正常模式时,它会工作,但不会更改图像,直到我关闭并重新打开应用程序,系统读取手机状态。我不知道出了什么问题,但这是我的代码:
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);
}
更改手机状态后,不会在OnClickListener中调用toggleUi()
。因此,该按钮不会被更新。
添加对toggleUi()
的调用,作为OnClickListener
的onClick(View view)
方法的最后一行。这应该会有所帮助。并采用dineshsharma的简化方法。
以下是的简单答案
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);
}
您的点击事件将是
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;
}
toggleUi();
}
}
);
}