1

クリックするたびにボタンの背景色を切り替えることを想定したアプリを作成しました。コードは次のとおりです。

package com.example.flash.light;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.Button;


public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button screen = (Button) findViewById(R.id.screen);
        Drawable background = getResources().getDrawable(R.drawable.black);
        screen.setBackgroundDrawable(background);

        screen.setOnClickListener(new Button.OnClickListener(){ 
            public void onClick(View v) { 
                Button screen = (Button) findViewById (R.id.screen);
                Drawable background = screen.getResources().getDrawable(screen.getId());
                if(background == getResources().getDrawable(R.drawable.black)){
                    Drawable newBackgroun = getResources().getDrawable(R.drawable.white);
                    screen.setBackgroundDrawable(background);
                }
                if(background == getResources().getDrawable(R.drawable.white)){
                    Drawable newBackgroun = getResources().getDrawable(R.drawable.black);
                    screen.setBackgroundDrawable(background);
                }
            } 
        }); 
    }

ボタンをクリックしても応答しません。ありがとう

4

2 に答える 2

2

ここでの問題は、あなたが返したリソースが

getResources().getDrawable(int id)

あなたがそれを呼ぶたびに異なります。Androidは、古いインスタンスを返すのではなく、描画可能なクラスの新しいインスタンスを作成するだけです。(少なくとも、この場合はキャッシュがないと信じています)

3つの異なるインスタンスを==演算子で比較しても、trueが返されることはありません。

2つ目は、コードの明らかなバグです。

            Button screen = (Button) findViewById (R.id.screen);
            Drawable background = screen.getResources().getDrawable(screen.getId());
            if(background == getResources().getDrawable(R.drawable.black)){
                Drawable newBackgroun = getResources().getDrawable(R.drawable.white);
                screen.setBackgroundDrawable(**newBackground**);
            }
            if(background == getResources().getDrawable(R.drawable.white)){
                Drawable newBackgroun = getResources().getDrawable(R.drawable.black);
                screen.setBackgroundDrawable(**newBackground**);
            }

背景の代わりに、そこにnewBackgroundが必要です。

于 2012-11-02T16:24:35.047 に答える
1

これを試して :

public class MainActivity extends Activity {

    private boolean isBlack = false;
    @Override
    public void onCreate(Bundle savedInstanceState) {

        // your code

        final Button screen = (Button) findViewById (R.id.screen);
        isBlack = true;
        screen.setBackgroundColor(Color.BLACK);
        screen.setOnClickListener(new Button.OnClickListener(){ 
            public void onClick(View v) { 
                if (isBlack){ 
                    screen.setBackgroundColor(Color.WHITE);
                    isBlack = false;
                }
                else{
                    screen.setBackgroundColor(Color.BLACK);
                    isBlack = true;
                }
            }

        });
}
}
于 2012-11-02T16:54:28.017 に答える