java - 单击时如何更改图标并保持不变,直到用户在android studio中再次单击
问题描述
我目前正在创建一个在 android studio 中有音乐的应用程序。所以我在设置菜单上创建了一个音乐图标,当它被点击时,它应该静音或删除音乐。所以这就是问题所在,当我单击音乐图标时,它会变为静音音乐图标,但是当我离开设置菜单并再次进入设置菜单时,本应静音的图标会返回到正常的音乐图标。我不知道为什么它会变回原来的图标。它应该被静音,当用户再次点击它时,它应该被取消静音。我是android开发的新手,所以我仍然不知道这种东西。
这是我的音乐和声音设置代码:
public void showSettings(View v){
TextView exitTxt;
LinearLayout music,sound;
Button quitBtn;
ImageView soundIC, musicIC;
settingsMenu.setContentView(R.layout.activity_settings);
settingsMenu.setCancelable(false);
exitTxt = settingsMenu.findViewById(R.id.exitBtn);
music = settingsMenu.findViewById(R.id.music);
sound = settingsMenu.findViewById(R.id.sound);
soundIC = settingsMenu.findViewById(R.id.soundOnIC);
musicIC = settingsMenu.findViewById(R.id.musicOnIC);
exitTxt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
settingsMenu.dismiss();
}
});
music.setOnClickListener(new View.OnClickListener() {
boolean isClicked = false;
@Override
public void onClick(View v) {
if(!isClicked) {
musicIC.setImageResource(R.drawable.ic_music_off);
music.setBackgroundResource(R.drawable.outline_clicked);
isClicked = true;
}
else{
music.setBackgroundResource(R.drawable.outline);
musicIC.setImageResource(R.drawable.ic_music);
isClicked = false;
}
}
});
sound.setOnClickListener(new View.OnClickListener() {
boolean isClicked;
@Override
public void onClick(View v) {
if(!isClicked) {
soundIC.setImageResource(R.drawable.ic_sound_off);
isClicked = true;
}
else{
soundIC.setImageResource(R.drawable.ic_sound);
isClicked = false;
}
}
});
settingsMenu.show();
}
解决方案
您必须将设置信息保存在某处。
简单的方法就是使用共享首选项,这是我使用的代码
public class Preferences {
SharedPreferences preferences;
public Preferences(Context context){
preferences = PreferenceManager.getDefaultSharedPreferences(context);
}
public void StorePreference(String Field,String Value){
if(preferences!=null){
SharedPreferences.Editor editor = preferences.edit();
if(editor!=null){
editor.putString(Field,Value);
editor.apply();
}
}
}
public String ReadPreference(String Field){
String returnData=null;
if(preferences!=null){
returnData=preferences.getString(Field,"");
}
return returnData;
}
public boolean ExistsPreference(String Field){
boolean returnData=false;
if(preferences!=null){
returnData=preferences.contains(Field);
}
return returnData;
}
}
将 Preferences 作为静态文件添加到扩展 Application.
然后使用 Preferences.StorePreference(Name of your field,Value) 保存数据。
要从首选项中读取,请使用 Preferences.ReadPreference(您的字段名称)。
有关如何保存数据的其他方法,您可以在这里查看https://developer.android.com/training/data-storage#pref
推荐阅读
- ios - 保存过滤的 FetchedResults 时 CoreData 崩溃
- machine-learning - 关于深度学习模型的 ROC
- android - Android Studio 4.1 中缺少 Logcat
- react-native - React Native:将图像源声明为函数时出现问题?
- optimization - C# 有助于缩短遵循明显模式的代码长度
- ios - 如何使隐私请求弹出窗口脱颖而出?重新安装应用程序时弹出窗口被白屏覆盖
- python - 使用 FastApi 读取动态 FormData
- javascript - 我尝试使用本地存储
- android - 为什么我的一些用户看到“无法获取文档,因为客户端离线”?
- python - 从外部打印到 docker 容器内的交互式终端