Android 更改活动时的setBackgroundResource

Android 更改活动时的setBackgroundResource,android,android-layout,android-imagebutton,Android,Android Layout,Android Imagebutton,在我的一个活动中,我有一个ImageButton,单击它可以使用setBackgroundResource()更改背景资源。我在该活动中工作得很好,但当我离开该活动并返回到它时,按钮已更改回XML中设置的默认背景。是否有办法将后台资源永久设置为某个值,直到再次单击按钮 保存您在SharedReferences中用作背景的图像的URL/id,并确保每次创建活动时都对其进行设置。否则,下次创建活动时将使用XML文件中指定的背景。将用作背景的图像的URL/id保存在SharedReferences中,

在我的一个活动中,我有一个
ImageButton
,单击它可以使用
setBackgroundResource()
更改背景资源。我在该活动中工作得很好,但当我离开该活动并返回到它时,按钮已更改回XML中设置的默认背景。是否有办法将后台资源永久设置为某个值,直到再次单击按钮

保存您在SharedReferences中用作背景的图像的URL/id,并确保每次创建活动时都对其进行设置。否则,下次创建活动时将使用XML文件中指定的背景。

将用作背景的图像的URL/id保存在SharedReferences中,并确保每次创建活动时都进行设置。否则,下次创建活动时将使用XML文件中指定的背景。

您应该覆盖活动
onResume()
方法。
使您的活动或按钮保持状态(按下或未按下),在
onResume()
方法中,检查此状态并更改背景。

您应该覆盖活动
onResume()
方法。
使您的活动或按钮保持状态(按下或未按下),并在
onResume()
方法中检查此状态并更改背景。

使用SharedReferences。

更改背景时:

getSharedPreferences("background", MODE_PRIVATE).edit().putString("background","background_nr_1").commit();
if (back.equals("background_nr_1") { // set the Background associated with nr_1
else if (.... "nr_2") ...

等等。这将把描述当前背景的字符串保存到SharedReferences

在onCreate方法中,您需要放置:

String back = getSharedPreferences("background", MODE_PRIVATE).getString("background");
这将使你的“背景”在后面。 现在,您可以选择背景:

getSharedPreferences("background", MODE_PRIVATE).edit().putString("background","background_nr_1").commit();
if (back.equals("background_nr_1") { // set the Background associated with nr_1
else if (.... "nr_2") ...

注意:这将恢复当前选择的背景,即使应用程序已关闭。

使用SharedReferences。

更改背景时:

getSharedPreferences("background", MODE_PRIVATE).edit().putString("background","background_nr_1").commit();
if (back.equals("background_nr_1") { // set the Background associated with nr_1
else if (.... "nr_2") ...

等等。这将把描述当前背景的字符串保存到SharedReferences

在onCreate方法中,您需要放置:

String back = getSharedPreferences("background", MODE_PRIVATE).getString("background");
这将使你的“背景”在后面。 现在,您可以选择背景:

getSharedPreferences("background", MODE_PRIVATE).edit().putString("background","background_nr_1").commit();
if (back.equals("background_nr_1") { // set the Background associated with nr_1
else if (.... "nr_2") ...

注意:这将恢复当前选择的背景,即使应用程序已关闭。

您需要将图像按钮上的值存储在静态变量或SharedReferences中

例如,声明一个变量

public static int bgresource;
现在点击img按钮

if(something) {
bgresource = R.drawable.img1
} else {
bgresource = R.drawable.img2
}

mylayout.setBackgroundResource(bgresource);
并在活动的onResume()中执行以下操作:

mylayout.setBackgroundResource(bgresource);

您需要将图像按钮上的值存储在静态变量或SharedReferences中

例如,声明一个变量

public static int bgresource;
现在点击img按钮

if(something) {
bgresource = R.drawable.img1
} else {
bgresource = R.drawable.img2
}

mylayout.setBackgroundResource(bgresource);
并在活动的onResume()中执行以下操作:

mylayout.setBackgroundResource(bgresource);

您可以使用以下技巧:

    //outside the onCreate:
    boolean resourceIsSet = false;

    //inside the onCreate:
    if(!resourceIsset) {
        setBackgroundResource();
        resourceIsset= true;
    }

或者您可以使用其他建议的

您可以使用以下技巧:

    //outside the onCreate:
    boolean resourceIsSet = false;

    //inside the onCreate:
    if(!resourceIsset) {
        setBackgroundResource();
        resourceIsset= true;
    }

或者,当我输入layout.options.setBackgroundResource(bgresource)时,您可以使用其他建议的

;在img按钮中,单击它会给我一个错误,上面写着“无法在原语类型int上调用setBackgroundResource(int)”。有解决方案吗?当我放入layout.options.setBackgroundResource(bgresource)时;在img按钮中,单击它会给我一个错误,上面写着“无法在原语类型int上调用setBackgroundResource(int)”。有什么解决方案吗?我从来没有在简历上做过。这是在onCreate下面吗?@Zach:是的,它在onCreate方法之后被调用。当您的活动暂停时(当另一个活动进入foerground,但未停止当前活动),返回时将不会调用onCreate,但会调用onResume。看看活动的API文档,其中描述了活动的生命周期(链接)。我从来没有在简历上写过。这是在onCreate下面吗?@Zach:是的,它在onCreate方法之后被调用。当您的活动暂停时(当另一个活动进入foerground,但未停止当前活动),返回时将不会调用onCreate,但会调用onResume。查看活动的API文档,其中描述了活动生命周期(链接)。