永久更改按钮图像

时间:2012-04-30 16:41:55

标签: android button sharedpreferences

我有一个TableLayout,每个TableRow中有很多按钮。在XML中,每个按钮都如下所示:

<Button
        android:id="@+id/a1"
        android:text="Button1" 
        android:textColor="#FFFFFF"
        android:textSize="10sp" 
        android:background="#000000"
        android:drawableTop="@drawable/image1" />

在我的应用程序中,我在Activity中有一个选项,用于“添加到收藏夹”按钮。问题是,如何永久更改按钮图像(即使用户离开应用程序),直到用户再次按下该选项(从收藏夹中删除)?我想我将不得不使用共享偏好,但我无法弄清楚如何去做。

非常感谢!

2 个答案:

答案 0 :(得分:1)

SharedPreference只是一个可以保存和检索值的文件。以下是在您的活动中使用SharedPreference的最简单步骤:

您需要创建一个变量sP,它将指向您将使用的SharedPreferences文件:

    SharedPreferences sP = getSharedPreferences("MyPrefs", MODE_PRIVATE);

您需要创建一个变量sPeD,该变量将指向该文件的“编辑器”,该变量将允许您将值放入该文件中:

    SharedPreferences.Editor sPeD = sP.edit();

然后,您可以从该文件中提取存储的值。这些值由“key”索引,该键只是您定义的String

    String myString = sP.getString("keyTextYouDefine", "Oops!");

如果密钥"keyTextYouDefine"中没有存储值,则getString()会使myString等于"Oops!"

为了存储该键的值,请使用:

    sPeD.putString("keyYouDefine","The string I want to save.");
    sPeD.commit();

如果您在将文件放入文件后忘记执行commit(),那么它们实际上并没有放在那里。

这样可以帮助你顺利完成。

后来添加:

然后,您可以使用它来确定按钮上的图像。

假设您已经定义了按钮

Button button = findViewById(R.id.myButton) // or whatever you are actually using

然后设置图像,如果有任何内容存储在ShardPreference

    int which = sP.getInt("WhichImage", 1); // assuming image1 is the "default"
    switch (which) {
        case 1:
            button.setCompoundDrawables(null, @drawable/image1, null, null);
            break;
        case 2:
            button.setCompoundDrawables(null, @drawable/image2, null, null);
            break;
        default: // no image
    }

在您的活动的其他地方,当您决定将按钮图像切换到image2时:

    if (whatever) {  // condition for changing to image 2
        button.setCompoundDrawables(null, @drawable/image2, null, null);
        sP.edit().putInt("WhichImage", 2).commit();
    }

我自己从未使用setCompoundDrawables(),因此您的里程可能会有所不同。

答案 1 :(得分:0)

共享偏好用于显而易见。

您可以从此处link1link2Developer Site获取有关共享偏好的教程

您需要实施的内容如下。

以共享首选项存储字符串。将其命名为buttonImageData。使用媒体商店类查找使用MediaStore.Audio.Media._ID存储的所有歌曲的_id。

将所有这个id存储在整数数组中。 然后当应用程序关闭时,所有带有标记符号的歌曲的_id以“”(空格)作为分隔符。简单的for循环和字符串追加功能将会解决。

再次启动应用程序时,请在sharedpreference中获取该字符串。使用以下类型的代码来获取所有歌曲的_id

生成的字符串将类似于buttonImageData = “23 43 42 54 12 567 653 234 543” 在Android中,Mediaprovider提供了一个数据库,其中歌曲始终具有唯一和永久性_id,因此即使歌曲文件的名称或任何属性发生变化,保持_id轨道也有助于使应用程序更加健壮。

StringTokenizer st = new StringTokenizer(buttonImageData);
     while (st.hasMoreTokens()) {
         array[i++]=Integer.parseInt(st.nextToken());
     } 

现在很简单,您拥有所有用户标记的歌曲的所有_id数组。所以更新按钮

我希望你能得到这个。如果有任何疑问问。根据我的知识,这是最有效的方式。