2012-04-30 7 views
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を使う必要があるだろうと思うが、どうやってそれをするのか分からない。

ありがとうございました!

答えて

1

SharedPreferenceは、値を保存して取得できるファイルです。あなたが使用するあなたはSharedPreferencesファイルを指します変数sPを行う必要があり

:ここにあなたの活動にSharedPreferenceを使用するための最も簡単な手順です

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

あなたは、変数sPeDを作成する必要があります

SharedPreferences.Editor sPeD = sP.edit(); 

次に、そのファイルから格納された値を抽出することができます。キー"keyTextYouDefine"に格納された値がない場合は、getString()"Oops!"からmyStringが等しくなります

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

:値は、定義したばかりStringある「キー」によってインデックス付けされています。

そのキーの時に値を格納するためには、これを使用する:

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

あなたは、彼らが実際にそこに置かれていない、ファイルで物事を入れた後、あなたがcommit()を行うことを忘れてしまった場合。

これはあなたのやり方でうまくいくはずです。

は後で追加:あなたは、ボタンの上にある画像を決定するためにこれを使用することができ

。何が他の場所で使用すると、ボタンの画像を切り替えることを決めたあなたの活動、中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 
    } 

に保存した場合

、あなたのボタンあなたがpropertly定義されているものは何でもから

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

その後、設定された画像を想定すると、 〜画像2:

setCompoundDrawables()自分のマイレージが異なる場合があります。

+0

答えをありがとう! SharedPreferencesを使ってこの "イメージの変更"を保存するにはどうすればよいですか? – Varki

+0

編集情報の追加を参照してください。 – mwengler

+0

ありがとうございます!今完璧に動作します! :) – Varki

0

共有優先度は明白に使用されます。

あなたが実装する必要があるものは以下の通りであるDeveloper Site

、ここlink1link2から共有好みにチュートリアルを得ることができます。

共有設定で文字列を保存します。 buttonImageDataという名前を付けます。メディアストアクラスを使用すると、MediaStore.Audio.Media._IDを使用して保存されているすべての曲の_idを見つけることができます。

すべてのIDを整数配列に格納します。 次に、アプリケーションがマーク記号を含むすべての曲の_idをストリングに ""(スペース)をセパレーターとしてクローズすると、シンプルなforループと文字列の追加機能はうまくいくでしょう。

アプリケーションが再起動され

、sharedpreference内の文字列を取得します。生成された文字列がbuttonImageDataアンドロイドIN = 「23 43 42 54 12 567 653 234 543」 ようになり、Mediaproviderは内曲データベースを提供

にすべての曲の_idを取得するためにコードの次のようなものを使用しユニークでパーマネント_idをいつも持っているので、_idのトラックを保持すると、曲ファイルの名前や属性が変更されてもアプリを堅牢にするのに役立ちます。

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

ユーザーがマークしたすべての曲のうち、すべての_idの配列を持つことが簡単になりました。ボタンを更新してください

私はあなたがこれを持っていることを望みます。いずれかのクエリが尋ねる場合。これは私の知る限り最も効率的な方法です。

+0

お返事ありがとうございます!私は今それを理解する! – Varki

+0

ようこそ!私の方法がうまくいくなら、答えを左にしてVマークをクリックして答えを受け入れてください。それは他人を導くでしょう。 :) –

関連する問題