0

ユーザーの選択時に、アプリ内のすべてのアクティビティの背景画像をユーザーに変更してもらいたいです。画像を変更している場所の背景画像を変更することはできますがActivity、他の画像を変更しようとするとActivityNullPointerException! はい、他のアクティビティの id を確認しましたLayout。これがコードです。

public class setting extends Activity {
    TextView tv;
    CheckBox cbS, theme1, theme2;
    RelativeLayout rel;
    OnClickListener checkBoxListener;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.setting);

        cbS = (CheckBox) findViewById(R.id.cb);
        theme1 = (CheckBox) findViewById(R.id.theme1);
        theme2 = (CheckBox) findViewById(R.id.theme2);
        // cbW=(CheckBox)findViewById(R.id.cbWordPress);
        checkBoxListener = new OnClickListener() {

            public void onClick(View v) {
                if (cbS.isChecked()) {
                    // anything
                }

                if (theme2.isChecked()) {
                    RelativeLayout rel = (RelativeLayout) findViewById(R.id.rel);
                    Resources res = getResources();
                    Drawable drawable = res.getDrawable(R.drawable.back_image1);
                    rel.setBackgroundDrawable(drawable);
                    // findViewById(R.id.rel).setBackgroundResource(R.drawable.back_image1);
                }

            }
        };

        cbS.setOnClickListener(checkBoxListener);
        theme2.setOnClickListener(checkBoxListener);
        // cbW.setOnClickListener(checkBoxListener);

    }
}
4

2 に答える 2

1

まだインスタンス化されていない UI コンポーネントにはアクセスできません。インテントを使用してアクティビティ間で情報を渡し (ユーザーの選択、またはいくつかのカスタム フラグまたは文字列)、起動されたアクティビティでこの「追加の」情報を使用して、それに応じて背景を変更します。

より良い理解と例については、ドキュメントのインテントの詳細をお読みください。

于 2012-07-20T09:42:02.583 に答える
0

これはできません.. を使用してレイアウト ファイルを参照するfindViewById()と、Android システムは現在のファイルContentViewのみを検索します。(つまり、setContentView()現在のアクティビティに使用するように設定したビュー)。そのため、システムは指定したリソースを見つけることができないため、NullPointerExeption のみを取得します。

背景への参照を個別に維持し、実際にそこに渡すときに他のアクティビティで使用する必要があります。

于 2012-07-20T09:37:07.890 に答える