2017-08-10 11 views
0

ボタン(曜日)付きのメインメニューがあります。これらの曜日を参照してデータがデータベースに格納されている場合、それらは「緑色」に変わります。私はSQLクエリ自体を理解していますが、colourChange関数が各ボタンをどのように識別し、それをどのように変更するのかを知っていません。誰かがこの仕組みを説明できるか?メインメニューボタンの色は変わりますが、わかりません

MainMenu.java

private void colourChange() { 
    Cursor result = myDb.checkColour(); 

    if (result.getCount() == 0) {                 // If the result equals to 0 then do nothing. 
     // Default colour remains 

    } else { 
                            // if the result is not 0 then... 
     while (result.moveToNext()) {                // Move through each result... 
      String day = result.getString(0);              // and store the day (column 0) of the result in day 
      findViewById(getResources().getIdentifier(day + "button", "id", getPackageName()))  // Find the view by ID using getResources.getIdentifier and passing the following parameter (day) 
        .setBackgroundColor(getResources().getColor(R.color.colorSuccess));    // The variable colourSuccess stored in the colours.xml file sets the background colour green. 
     } 
    } 
} 

Database.java

public Cursor checkColour() {                  // a SELECT statement is used to SELECT DayOfWeek FROM RoutineTable and GROUP BY DayOfWeek and store this as result. 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor result = db.rawQuery("SELECT DayOfWeek FROM " + RoutineTable + " GROUP BY DayOfWeek", null); 

    return result; 
} 
+0

デバッガでステップインして変数を検査しましたか? – litelite

+0

あなたの質問は何ですか? – Milk

答えて

0

コードを分解しましょう。

getResources().getIdentifier(day + "button", "id", getPackageName()) 

Resources.getIdentifier()方法は、あなたが名前によって、動的にR.java内の各種定数にアクセスすることができます。 day + "button"はリソースの名前で、"id"はリソースのタイプです。したがって、このメソッドはR.id.[day]buttonを返します。 day"sunday"の場合は、R.id.sundaybuttonになります。

findViewById([code from above]) 

getIdentifier()は(R.id.sundaybuttonのように)あなたに "本物" のidを返したことを、findViewById()はそのandroid:id属性を持つViewオブジェクトのためのあなたのレイアウトを検索します。したがって、レイアウトにViewandroid:id="@+id/sundaybutton"が含まれている場合は、findViewById(R.id.sundaybutton)が返されます。

getResources().getColor(R.color.colorSuccess) 

Resources.getColor()(おそらくそれは多分0xFF00FF00、緑色である)カラー識別子を取り(ここでR.id.colorSuccess)とカラー値を返します。

setBackgroundColor([color from above]) 

この1つは簡単です:それは指定されたViewの背景色を設定します。

要するに、あなたは色の値を取得し、その識別子

  • を使用してビューを見つける曜日と

    • ビルドにわたり週
    • の日から識別子を反復するつもりですあなたのリソース
    • たビューの背景にその色の値を適用

    希望からこのことができます!

  • +0

    優れた答え。品質と詳細については10/10を参照してください。私を助けてくれてありがとう! :) – MarkW

    0

    こんにちは、

    アプリケーションのリソースファイルについては、すべてのコードを見ずにそれがするのは難しいだろうあなたに明確な答えを与えてください。コードを見ると、クエリで返された曜日と現在のアプリケーションの単語 "button"とのリソースが一致するように見えます。次に、 "colorSuccess"というリソースの色リソースフォルダを調べて背景色を設定し、緑色に変更します。

    0

    そのcolourChange()は、データベースに最初にカーソルとして戻ることを要求する機能です。 while (result.moveToNext())は結果のすべての行をループしています。 AndroidのAPIドキュメントをAccoriding id.Example "@+id/fridaybutton"

    指定されたレイアウトによって、リソースを見つける

    getResources().getIdentifier(day + "button", "id", getPackageName()) 
    

    。関数のパラメータがここにあります。

    getIdentifier(String name, String defType, String defPackage) 
    
    関連する問題