0

各TableRowに多数のボタンがあるTableLayoutがあります。XMLでは、すべてのボタンは次のようになります。

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

私のアプリでは、アクティビティにオプションがあり、ボタンを「お気に入りに追加」するために使用されます。問題は、ユーザーがオプション(お気に入りから削除)をもう一度押すまで、ボタンの画像を永続的に変更するにはどうすればよいですか(ユーザーがアプリを離れた場合でも)。sharedpreferencesを使用する必要があると思いますが、その方法がわかりません。

どうもありがとうございます!

4

2 に答える 2

1

SharedPreference値を保存および取得できる単なるファイルです。SharedPreferenceアクティビティでaを使用する最も簡単な手順は次のとおりです。

使用するファイルをsP指す変数を作成する必要があります。SharedPreferences

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

そのファイルの「エディタ」を指す変数を作成する必要がありますsPeD。これにより、そのファイルに値を入れることができます。

    SharedPreferences.Editor sPeD = sP.edit();

次に、そのファイルから保存された値を抽出できます。値は、定義した「キー」によってインデックスが付けられ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()自分自身を使ったことがないので、あなたのマイレージは異なるかもしれません。

于 2012-04-30T16:56:06.310 に答える
0

共有設定は、明白にするために使用されます。

共有設定に関するチュートリアルは、ここからリンク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 に答える