0

我有一个 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 中有一个选项,用于“添加到收藏夹”按钮。问题是,我怎样才能永久更改按钮图像(即使用户离开应用程序),直到用户再次按下选项(从收藏夹中删除)?我想我必须使用 sharedpreferences,但我不知道该怎么做。

非常感谢!

4

2 回答 2

1

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

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

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

您需要创建一个变量,该变量sPeD将指向该文件的“编辑器”,这将使您可以将值放入该文件:

    SharedPreferences.Editor sPeD = sP.edit();

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

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

如果 key处没有存储值,"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()自己,因此您的里程可能会有所不同。

于 2012-04-30T16:56:06.310 回答
0

Shared Preference 用于显而易见的用途。

您可以从此处链接 1链接 2开发人员站点获取有关共享首选项的教程

您需要实施的事情如下。

将字符串存储在共享首选项中。将其命名为 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 的数组。所以更新按钮

我希望你得到这个。如果有任何疑问询问。据我所知,这是最有效的方法。

于 2012-04-30T17:54:07.843 回答