2017-10-02 8 views
0

は、私は世界をプログラミングAndroidに非常に新しいだと私は問題を抱えている: 変更背景色を使用すると、Androidアプリを開くたびに

が、私は基本的に背景の色との色を変更するだけでアプリを作りましたあなたがそれを開くときにボタン(私はresで色を設定したスイッチを使ってみました)が動作しないので、いつでも同じ色が表示されます。

これが私の活動のコードです:

public class MainActivity extends AppCompatActivity { 

RelativeLayout v; 
Button z; 
Random r; 
int randomNumber; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    v=(RelativeLayout) findViewById(R.id.mainLayout); 
    z=(Button) findViewById(R.id.mainButton); 

    r=new Random(); 
    randomNumber=r.nextInt(10); 


    switch (randomNumber) 
    { 
     case 0: v.setBackgroundColor(R.color.indigo); z.setBackgroundColor(R.color.indigoB); break; 
     case 1: v.setBackgroundColor(R.color.deepOrange); z.setBackgroundColor(R.color.deepOrangeB); break; 
     case 2: v.setBackgroundColor(R.color.purple); z.setBackgroundColor(R.color.purpleB); break; 
     case 3: v.setBackgroundColor(R.color.blueGrey); z.setBackgroundColor(R.color.blueGreyB); break; 
     case 4: v.setBackgroundColor(R.color.red); z.setBackgroundColor(R.color.redB); break; 
     case 5: v.setBackgroundColor(R.color.green); z.setBackgroundColor(R.color.greenB); break; 
     case 6: v.setBackgroundColor(R.color.lime); z.setBackgroundColor(R.color.limeB); break; 
     case 7: v.setBackgroundColor(R.color.pink); z.setBackgroundColor(R.color.pinkB); break; 
     case 8: v.setBackgroundColor(R.color.yellow); z.setBackgroundColor(R.color.yellowB); break; 
     case 9: v.setBackgroundColor(R.color.teal); z.setBackgroundColor(R.color.tealB); break; 
     case 10:v.setBackgroundColor(R.color.deepPurple); z.setBackgroundColor(R.color.deepPurpleB); break; 
    } 



} 

};

これはなぜ機能しませんか? 誰もがこの問題の解決方法を知っていますか?

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

+0

あなたがここで不足していると思われるのは、[Androidのアクティビティライフサイクル](https://developer.android。com/guide/components/activities/activity-lifecycle.html)を参照してください。アクティビティーが完了していないか、(未処理の)構成変更が発生しない限り、アクティビティーは再作成されません。 –

+0

はい、また、すべてのonStart、onResume、onPause、onStop、onStop、onDestroyともに動作しませんでした... – Andrea

答えて

0

setBackgroundColor()色整数(@ColorInt)、ない色リソースID(@ColorRes)を受け付けます。リソース参照の代わりにを渡す必要があります。要するに

、交換してください:

v.setBackgroundColor(R.color.indigo); 

をして:

v.setBackgroundColor(getColor(R.color.indigo)); 

あなたはコンテキストの外側からこのビューを参照している場合は、コンテキストからリソースインスタンスを取得する必要があります。

+0

大変ありがとうございますが、うまくいきますが、getColor()メソッドにはAPI 23以上が必要です。同じことをするために他の方法を知っていますか? – Andrea

+0

@アンドレア[APIレベル1](https://developer.android.com/reference/android/content/res/Resources.html#getColor%28int%29)または[APIレベル23メソッド]を条件として使用できます( https://developer.android.com/reference/android/content/res/Resources.html#getColor%28int,%20android.content.res.Resources.Theme%29)、サポートライブラリを使用している場合は、代わりに[ContextCompatのメソッドを使用する](https://developer.android.com/reference/android/support/v4/content/ContextCompat.html#getColor%28android.content.Context,%20int%29)を使用することをお勧めします。 –

+0

助けてくれてありがとう、それは完璧に動作します! – Andrea

0

これを試してみてください:

private final int colorArray[] = { 
     R.color.indigo, R.color.deepOrange, R.color.purple,R.color.blueGrey 
    }; 

色をシャッフルするために、このメソッドを追加します。

static void shuffleArray(int[] arr) 
    { 
     Random rnd = new Random(); 
     for (int i = arr.length - 1; i > 0; i--) 
     { 
      int index = rnd.nextInt(i + 1); 
      // Swap 
      int a = arr[index]; 
      arr[index] = arr[i]; 
      arr[i] = a; 
     } 
    } 

onCreate()でシャッフルメソッドを呼び出し、引数として、あなたの色の配列を渡す:

shuffleArray(imageArray) 

は、次に使用:OnCreateイベントで

public int newRandom(){ 
    Random r; 
    r=new Random(); 
    return r.nextInt(10); 
} 

この機能を使用するには、

v.setBackgroundColor(colorArray[0]); 
z.setBackgroundColor(colorArray[1]); 
0

てみてくださいonResumeではなくonCreateイベントに色を変更するコードを配置しようとすると

randomNumber = newRandom(); 
0

を置きますlike:

@Override 
protected void onResume() { 
    super.onResume(); 
    // add code to change color here 
} 

アプリが実際に閉じられておらず、最小化されている可能性があるため、アプリを開くためにアイコンをタップすると、onCreateではなくonResumeイベントがトリガーされるアプリを最大限に活用できます。色が変化しない理由は、onCreateイベントがトリガされないためです。

関連する問題