[英]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.