1

私のアプリには、4 つのメイン ボタンと、別の 2 つのボタンがあります。これらの 4 つのボタンは、メイン アクティビティの開始時に宣言されます。

Button button1, button2, button3, button4;
button1 = (Button) findViewById(R.id.button1);
button1.setTag("blue");

(各ボタンにはタグがあり、button1 と同じ方法で設定されます)

押されたときに異なる色を循環させたい4つのボタン。私はこれを次の方法で管理します。

public void button1(View v) {

    if ("blue".equals(button1.getTag())) {
        button1.setBackgroundDrawable(getResources().getDrawable(
                R.drawable.brown));
        button1.setTag("brown");
    } else if ("brown".equals(button1.getTag())) {
        button1.setBackgroundDrawable(getResources().getDrawable(
                R.drawable.red));
        button1.setTag("red");
    } else if //...etc

2 つのボタンのいずれかを押すまで、これはすべてうまく機能します。ボタンの 1 つのサンプル コードです。

    public void back(View v) {
    setContentView(R.layout.main);
    t = new TextView(this);
    t = (TextView) findViewById(R.id.textView1);
    t.setText("");
}

2 つのボタンのいずれかを押すと、色が xml ファイルの元のドローアブル セットに戻ります。

android:background="@drawable/blue"

4 つのメイン ボタンを押してもドローアブルは変更されませんが、再タグ付けされていることは確かにわかっているので、ボタンを押した後にドローアブルが変更されないのはなぜですか?

4

1 に答える 1

3

「2 つのボタン」の onClick ハンドラが を呼び出すとActivity.setContentView(int)、すべてのボタンが元の XML レイアウトで指定された方法にリセットされます。新しいビューは膨張し、これらにはタグがありません ( の呼び出し後にタグを再設定していないようですsetContentView)。null タグはどの色の文字列とも一致しないため、ボタンの背景は循環しません。

ビューをそのまま維持したい場合は、アクティビティのコンテンツ ビューをリセットしないでください。ほとんどの場合、setContentViewアクティビティの存続期間ごとに 1 回だけ呼び出されますが、明らかにいくつかの例外があります。

于 2012-04-12T04:22:09.937 に答える